0

新しいプロジェクトで新しいサーブレット 3 非同期リクエストをテストしていますが、コントローラーのテスト中にスタックします。

次のようなコントローラーメソッドがあります。

@RequestMapping(value = "/thumbnails", method = RequestMethod.GET)
public Callable<ResponseEntity<List<Thumbnail>>> getAllThumbnails() {
    //at this point I get results from the repository
    return () -> {
        //at this point I don't get any results
        final List<Thumbnail> thumbnails = thumbnailRepository.findAll();
        return ResponseEntity.ok(thumbnails);
    };
}

そして、このような対応するテスト:

@Test
@Transactional
public void testGetAllThumbnails() throws Exception {
    thumbnailRepository.saveAndFlush(thumbnail);

    final MvcResult mvcResult = restThumbnailMockMvc.perform(get("/test/thumbnails"))
                                                    .andExpect(request().asyncStarted())
                                                    .andExpect(request().asyncResult(instanceOf(ResponseEntity.class)))
                                                    .andReturn();

    mvcResult.getAsyncResult();

    restThumbnailMockMvc.perform(asyncDispatch(mvcResult))
                        .andDo(print())
                        .andExpect(status().isOk())
                        .andExpect(content().contentType(MediaType.APPLICATION_JSON))
                        .andExpect(jsonPath("$.[*].id").value(hasItem(thumbnail.getId().longValue())))
                        .andExpect(jsonPath("$.[*].name").value(hasItem(DEFAULT_NAME)))
                        .andExpect(jsonPath("$.[*].fileName").value(hasItem(DEFAULT_FILE_NAME)));
}

リポジトリなどは単純なSpring Data jpa Beanであり、全体の構成はSpring Bootに基づいています。

通常の方法でコントローラーにクエリを実行すると、すべて正常に動作しますが、テストではリポジトリから結果が返されません。

高度なご協力に感謝します。ウェブ上で同様のものを見つけることができません。

4

1 に答える 1

0

少し試行錯誤した後、何が問題なのかがわかりました。

問題は、テストメソッドがトランザクションで実行され、何らかの理由で、テストの実行中にコントローラーの呼び出し可能オブジェクトで同じトランザクションにアクセスできなかったことです。@Transactionalテストメソッドから注釈を削除すると、すべてが正常に機能します。

于 2015-08-21T13:30:58.710 に答える