我使用Spring Boot 1.4.2和Jersey(jax-rs)创建一个REST控制器。我遵循了关于如何测试REST控制器(Testing the Spring MVC slice)的文档。但我的测试返回404,我似乎无法找出原因。这里的控制器是简化的,但问题依然存在。Spring Boot 1.4.2 @WebMvcTest返回状态404
我的问题是如何在运行测试时获得200状态?
HealthController.java
@Controller
@Path("/health")
public class HealthController {
@GET
@Produces(MediaType.APPLICATION_JSON)
public Health health() {
return Health.up().build();
}
}
运行服务器和做一个查询给了我这个
%> curl -i http://localhost:8080/health
HTTP/1.1 200
X-Application-Context: application
Content-Type: application/json
Content-Length: 21
Date: Sun, 27 Nov 2016 15:22:30 GMT
{
"status" : "UP"
}%
HealthControllerTest.java
@RunWith(SpringRunner.class)
@WebMvcTest(HealthController.class)
public class HealthControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void health() throws Exception {
mockMvc.perform(get("/health").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk()); // 200 expected
}
}
这是我得到的运行试验
. ____ _ __ _ _
/\\/___'_ __ _ _(_)_ __ __ _ \ \ \ \
(()\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ))))
' |____| .__|_| |_|_| |_\__, |////
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.4.2.RELEASE)
2016-11-27 16:22:08.254 INFO 9029 --- [ main] no.avec.controller.HealthControllerTest : Starting HealthControllerTest on ducati.local with PID 9029 (started by avec in /Users/avec/Projects/RESTdemo)
2016-11-27 16:22:08.257 DEBUG 9029 --- [ main] no.avec.controller.HealthControllerTest : Running with Spring Boot v1.4.2.RELEASE, Spring v4.3.4.RELEASE
2016-11-27 16:22:08.257 INFO 9029 --- [ main] no.avec.controller.HealthControllerTest : No active profile set, falling back to default profiles: default
2016-11-27 16:22:09.294 INFO 9029 --- [ main] no.avec.controller.HealthControllerTest : Started HealthControllerTest in 1.421 seconds (JVM running for 2.132)
MockHttpServletRequest:
HTTP Method = GET
Request URI = /health
Parameters = {}
Headers = {Accept=[application/json]}
Handler:
Type = org.springframework.web.servlet.resource.ResourceHttpRequestHandler
Async:
Async started = false
Async result = null
Resolved Exception:
Type = null
ModelAndView:
View name = null
View = null
Model = null
FlashMap:
Attributes = null
MockHttpServletResponse:
Status = 404
Error message = null
Headers = {}
Content type = null
Body =
Forwarded URL = null
Redirected URL = null
Cookies = []
java.lang.AssertionError: Status
Expected :200
Actual :404
下你的球衣休息enpoints你是不是也使用Web安全配置为您
样本类? –
当创建测试的上下文时,您的控制器可能没有被Spring拾取。尝试使用'@SpringBootTest'结合'@AutoConfigureMockMvc',如下所述:http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/autoconfigure/web/servlet/ WebMvcTest.html。 – Tom
当* curl */health'端点时,哪一个会被调用:Spring Boot执行器的运行状况端点还是您的自定义控制器?恕我直言,执行器的终点是'curl -i http:// localhost:8080/health'成功并且你的控制器根本没有被拾起的原因 –