我想编写一个测试,该测试在处理请求时评估具有NullPointerException的控制器的响应。
为此,我编写了一个在处理请求时抛出NullPointer的控制器。使用MockMVC控制器,我向该控制器发送GET请求。
在处理Null指针时抛出该控制器的控制器:
@Controller
public class Controller{
@GetMapping(value = "/api/data")
@ResponseBody
public ResponseEntity<Resource> getData() {
if (true)
throw new NullPointerException(); // Intended Nullpointer Exception
return ResponseEntity.notFound().build();
}
}
我期望收到500错误的测试功能:
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class Test {
@Autowired
protected MockMvc mockMvc;
@Test
public void shouldReturn500StatusWhenControllerThrowsAnException() throws Exception {
MvcResult result = this.mockMvc.perform(get("/api/data"))
.andExpect(status().is5xxServerError())
.andReturn();
}
}
我希望MockMVC请求返回错误500,就像真实控制器作为服务器运行时一样。 实际上,实际上MockMVC只是由于NullPointer异常而失败,并且不返回任何内容。
答案 0 :(得分:0)
EDIT: 我遇到了同样的问题,请尝试使用这些注释,而不要使用三个注释:
@RunWith(SpringRunner.class)
@WebMvcTest
@AutoConfigureWebClient
答案 1 :(得分:0)
我找到了一个使用WebTestClient的解决方案。
向我的build.gradle添加了两个新的依赖项:
<Field
name="username"
validate={debounceUsernameValidation}
>
{({ field, form }: FieldProps) => (
<Fragment>
<input
{...field}
className={classNames('form-control', {
'is-invalid': form.errors[field.name] &&
form.touched[field.name]
})}
placeholder="Username (Required)"
type="text"
/>
<ErrorMessage
name={field.name}
component="div"
className="text-danger"
/>
</Fragment>
)}
</Field>
测试功能如下:
testCompile "org.springframework.boot:spring-boot-starter-webflux:2.1.3.RELEASE"
testCompile "org.springframework.boot:spring-boot-starter-test:2.1.3.RELEASE"
就像GET请求返回的错误500一样,它在现实世界中的情况也是如此。