Spring 引导 junit 不工作
Spring boot junit not working
我正在尝试为我的 spring 启动应用程序添加单元测试。它不起作用,并抛出 404。我正在使用 1.2.1 版本 spring 启动并且具有 spring-boot-starter-test 的依赖项。如果我遗漏了什么,请告诉我。 spring 启动应用程序没有任何问题。
这是我的代码,
public class Application{
public static void main(String[] args) {//NOSONAR
SpringApplication.run(Application.class, args);
}
@Bean
public ServletRegistrationBean displayListServletRegistrationBean(){
return new ServletRegistrationBean(new DisplayServlet(),"/display");
}
@Bean
public ServletRegistrationBean manageServletRegistrationBean(){
return new ServletRegistrationBean(new ManageServlet(),"/manage");
}
}
我的junit测试用例代码,
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:application-test-context.xml"})
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
@WebIntegrationTest({"server.port=0", "management.port=0"})
@ActiveProfiles("scratch")
public class ApplicationTest {
@Autowired
private WebApplicationContext context;
private MockMvc mvc;
@Before
public void setUp() {
this.mvc = MockMvcBuilders.webAppContextSetup(this.context).build();
}
@Test
public void testHome() throws Exception {
this.mvc.perform(get("/display")).andExpect(status().isOk());
//this.mvc.perform(get("/")).andExpect(status().isOk());
}
}
控制台有
org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/display] in DispatcherServlet with name ''
Junit 结果有
java.lang.AssertionError: Status expected:<200> but was:<404> at org.springframework.test.util.AssertionErrors.fail(AssertionErrors.java:60)
Spring MVC 测试仅设计用于测试由 Spring MVC 的 DispatcherServlet
处理的请求。它对您的 DisplayServlet
一无所知,这就是为什么,如日志中所示,DispatcherServlet
尝试处理请求而不是您的 DisplayServlet
.
您可以通过几种不同的方式进行操作。例如:
- 您可以更改您的应用程序以使用
ServletWrappingController
包装您的 servlet,以便 Spring MVC 知道它们。
- 您可以更改测试方法并针对真实服务器使用
RestTemplate
。您实际上已经通过测试 class. 上的 WebIntegrationTest
注释启动了一个真实的服务器
我正在尝试为我的 spring 启动应用程序添加单元测试。它不起作用,并抛出 404。我正在使用 1.2.1 版本 spring 启动并且具有 spring-boot-starter-test 的依赖项。如果我遗漏了什么,请告诉我。 spring 启动应用程序没有任何问题。
这是我的代码,
public class Application{
public static void main(String[] args) {//NOSONAR
SpringApplication.run(Application.class, args);
}
@Bean
public ServletRegistrationBean displayListServletRegistrationBean(){
return new ServletRegistrationBean(new DisplayServlet(),"/display");
}
@Bean
public ServletRegistrationBean manageServletRegistrationBean(){
return new ServletRegistrationBean(new ManageServlet(),"/manage");
}
}
我的junit测试用例代码,
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:application-test-context.xml"})
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
@WebIntegrationTest({"server.port=0", "management.port=0"})
@ActiveProfiles("scratch")
public class ApplicationTest {
@Autowired
private WebApplicationContext context;
private MockMvc mvc;
@Before
public void setUp() {
this.mvc = MockMvcBuilders.webAppContextSetup(this.context).build();
}
@Test
public void testHome() throws Exception {
this.mvc.perform(get("/display")).andExpect(status().isOk());
//this.mvc.perform(get("/")).andExpect(status().isOk());
}
}
控制台有
org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/display] in DispatcherServlet with name ''
Junit 结果有
java.lang.AssertionError: Status expected:<200> but was:<404> at org.springframework.test.util.AssertionErrors.fail(AssertionErrors.java:60)
Spring MVC 测试仅设计用于测试由 Spring MVC 的 DispatcherServlet
处理的请求。它对您的 DisplayServlet
一无所知,这就是为什么,如日志中所示,DispatcherServlet
尝试处理请求而不是您的 DisplayServlet
.
您可以通过几种不同的方式进行操作。例如:
- 您可以更改您的应用程序以使用
ServletWrappingController
包装您的 servlet,以便 Spring MVC 知道它们。 - 您可以更改测试方法并针对真实服务器使用
RestTemplate
。您实际上已经通过测试 class. 上的
WebIntegrationTest
注释启动了一个真实的服务器