

いつもお世話になっております。

Spring Boot WebFluxのjUnitテストでonErrorResume()を通ることを確認したいのですが、  
Exceptionが発生時にjUnitテストが止まってしまい、パスを通ることが確認できません。  
設定など必要な項目があればご教授ください。

## やりたいこと

`repository.hello()` でRuntime Exceptionが発生したときに  
onResumeErrorで例外処理が行われていること(ログが出力されること)を確認したい。

## テストコード

[code]

    public class HealthCheckHandlerTest {
    
        private HealthCheckHandler handler;
    
        @Mock
        private Repository repository;
    
        @Before
        public void setUp(){
            MockitoAnnotations.initMocks(this);
            // テスト用インスタンスの生成
            handler = new HealthCheckHandler(repository);        
        }    
    
        @Test
        public void testHandleHealthMonitoring異常系1_DBでエラー() {
            // 事前準備
            when(repository.hello()).thenThrow(new RuntimeException("DB接続エラー"));
    
            // テストの実行
            Mono<ServerResponse> response = handler.handleHealthMonitoring(request);
            response.subscribe(r -> r.statusCode());
        }
    }
    
[/code]

  * テスト対象クラス

[code]

    @Component
    public class HealthCheckHandler {
    
        /**
         * リポジトリ
         */
        private final Repository repository;
    
        /**
         * コンストラクタ
         *
         * @param repository リポジトリ
         */
        public HealthCheckHandler(
                Repository repository) {
            this.repository = repository;
        }
    
      /**
         * handler
         *
         * @param request
         * @return
         */
        public final Mono<ServerResponse> handleHealthMonitoring(final ServerRequest request) {
            // とりあえずpostgreを呼び出してみてエラーが生じないか確認する
            Mono<Map<String, Object>> postgreOpe = repository.hello();
            // hogehogeは今回割愛
            return Mono.zip(hogehoge, postgreOpe).flatMap(r -> {
                return ServerResponse
                        .ok();
            }).timeout(Duration.ofSeconds(DURATION_TIME)).onErrorResume(t -> {
                logger.error("health checkでエラーを確認しました", t);
                return ServerResponse
                        .status(HttpStatus.INTERNAL_SERVER_ERROR)
                        .contentType(MediaType.APPLICATION_JSON)
                        .bodyValue("Error\n");
            });
        }
    }
    
[/code]

## 現状どうなるか？

テストコードの最後で `response.subscribe` 呼び出し時に"DB接続エラー"
のモックのエラースタックが積みあがって表示される。テストも失敗扱い。タイミングはあってるけど、処理は継続してほしいのだが...

## 試験環境

vs codeに、java plugin その他一式をぶち込んで実施  
* 主なプラグイン  
* Maven for Java  
* Java Test Runner  
* Language Support for Java(TM) by Red Hat  
など。


CC BY-SA 4.0
2020-04-02T03:18:22.150
65295
2020-04-02T04:04:01.393
2904
question
spring-boot junit
Spring Boot WebFluxのjUnitテストでonErrorResume()を通ることを確認したい


`when(repository.hello()).thenThrow(new RuntimeException("DB接続エラー"));`  
↓  
`when(repository.hello()).thenReturn(Mono.error(new
RuntimeException("DB接続エラー")));`


CC BY-SA 4.0
2020-04-02T04:04:01.393
65297
2020-04-02T04:04:01.393
2904
65295
answer