私は、テストを修正しようとしているサークルでラウンドラウンドしていますが、SOや他のオンラインソースでは解決策がありません。私はあるMyException
例外を処理するために、この@ControllerAdvice
方法があります:@ExceptionHandlerが呼び出されていないtest
@ControllerAdvice
public class MyControllerAdvice {
@ExceptionHandler(MyException.class)
@ResponseBody
public HttpEntity<ErrorDetail> handleMyException(MyException exception) {
return new ResponseEntity<>(exception.getErrorDetail(), exception.getHttpStatus();
}
}
をそして私は、コントローラを持っている:
によってテストされ@Controller
@RequestMapping(value = "/image")
public class ImageController {
@Autowired
private MyImageService imageService;
@RequestMapping(value = "/{IMG_ID}", method = RequestMethod.GET,
produces = MediaType.IMAGE_PNG_VALUE)
public HttpEntity<?> getImage(String imageId) {
byte[] imageBytes = imageService.findOne(imageId); // Exception thrown here
....
return new ResponseEntity<>(imageBytes, HttpStatus.OK);
}
...
}
:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = MyApplication.class)
@WebAppConfiguration
@IntegrationTest("server.port:0")
public class ThumbnailControllerTest {
@Autowired
private ImageController testObject;
private ImageService mockImageService = mock(ImageService.class);
@Autowired
protected WebApplicationContext webApplicationContext;
private MockMvc mockMvc;
@Before
public void setup() {
testObject.setImageService(mockImageService);
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
@Test
public void testImageWhichDoesntExistReturns404() {
doThrow(new MyException("Doesn't exist", HttpStatus.NOT_FOUND))
.when(mockImageService).findOne(anyString());
mockMvc.perform(get("/image/doesnt_exist"))
.andExpect(status().isNotFound());
}
}
私は同様のセットアップを持っています他のテストでは、これらは合格と思われます。しかし、これについて私は得る:Failed to invoke @ExceptionHandler method: public org.springframework.http.HttpEntity<mypackage.ErrorDetail>
しかし、私はそれが呼び出されたときにそれが呼び出され、ログが検出されたことを示すので(Detected @ExceptionHandler methods in MyControllerAdvice
)それが呼び出されることを知っている。
これは、HttpMessageConvertersが正しく解決されず、必要なJSON形式ではなくModelAndViewアプローチを使用して出力を解決しようとしているからです。私は、ControllerAdviceとHttpMessageConvertersが設定されたMockMvcにstandaloneSetup
を使用するか、または必要なタイプのHttpMessageConverters Beanを使用して強制的に強制することができませんでした。
私は春の依存関係を使用しています:私は間違って
org.springframework.boot:spring-boot-starter-web:jar:1.3.1.RELEASE
org.springframework.boot:spring-boot-starter:jar:1.3.1.RELEASE
org.springframework.boot:spring-boot-starter-test:jar:1.3.1.RELEASE
org.springframework.boot:spring-boot-starter-data-rest:jar:1.3.1.RELEASE
何をしているのですか?
多くの助けになりましたが、問題を解決した 'produce'とは対照的に、うまく動作するレスポンスにヘッダーとしてコンテンツタイプを指定しました。 – joelc