Bir sınayi düzeltmeye çalışan daireler içinde yuvarlak ve yuvarlak gidiyordum ve SO ya da diğer çevrimiçi kaynaklarda hiçbir şey bir çözüm sağlamıyor. Ben ise MyException
İstisna işlemek için bu @ControllerAdvice
yöntemi vardır:@ExceptionHandler çalıştırılmadı test
@ControllerAdvice
public class MyControllerAdvice {
@ExceptionHandler(MyException.class)
@ResponseBody
public HttpEntity<ErrorDetail> handleMyException(MyException exception) {
return new ResponseEntity<>(exception.getErrorDetail(), exception.getHttpStatus();
}
}
Ve ben bir denetleyici var:
@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);
}
...
}
tarafından test edilmiştir:
@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());
}
}
Ben benzer bir kurulum var Diğer testler için ama bunlar geçiyor gibi görünüyor. Ancak bunun için şunu aldım:
Failed to invoke @ExceptionHandler method: public org.springframework.http.HttpEntity<mypackage.ErrorDetail>
ancak çağrıldığını biliyorum çünkü adıma girdiğimde ve günlükler algılandığını gösteriyor (
Detected @ExceptionHandler methods in MyControllerAdvice
).
Düşüncelerimin nedeni, HttpMessageConverters öğesinin doğru şekilde çözümlenmemesi ve çıktıyı, gerekli JSON biçimini değil, bir ModelAndView yaklaşımı kullanarak çözmesidir. Bunu, MockMvc için (ControllerAdvice ve HttpMessageConverters kümesi ile yapılandırılmış) standaloneSetup
'u kullanarak ya da gerekli türde bir HttpMessageConverters çekirdeği kullanarak zorlayarak zorlayamadım.
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
yanlış yapıyorum:
Bahar bağımlılıkları kullanıyorum?
Çok yardımcı oldugunuz için, içerik türünü, sorunun çözülmesine yol açan "ürünler" in tersine iyi sonuç veren yanıt üzerinde bir başlık olarak belirledim. – joelc