春季启动junit不工作

Posted

技术标签:

【中文标题】春季启动junit不工作【英文标题】:Spring boot junit not working 【发布时间】:2015-11-21 23:39:34 【问题描述】:

我正在尝试为我的 Spring Boot 应用程序添加单元测试。它不起作用,并抛出 404。我使用的是 1.2.1 版本的 spring boot,并且依赖于 spring-boot-starter-test。如果我遗漏了什么,请告诉我。 Spring Boot 应用程序可以正常运行。

这是我的代码,

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)

【问题讨论】:

【参考方案1】:

Spring MVC 测试仅设计用于测试由 Spring MVC 的DispatcherServlet 处理的请求。它对您的DisplayServlet 一无所知,这就是为什么,如日志中所示,DispatcherServlet 尝试处理请求而不是您的DisplayServlet

您可以通过几种不同的方式进行操作。例如:

    您可以更改您的应用程序以使用 ServletWrappingController 包装您的 servlet,以便 Spring MVC 知道它们。 您可以更改您的测试方法并针对真实服务器使用RestTemplate。借助测试类上的 WebIntegrationTest 注释,您实际上已经启动了一个真正的服务器。

【讨论】:

感谢您的回复。如何对 Spring Boot main() 方法进行单元测试? 这可能最好在单独的问题中解决

以上是关于春季启动junit不工作的主要内容,如果未能解决你的问题,请参考以下文章

在春季启动autowired不工作,总是null?

春季批处理调度期间出现的错误

春季现场注入的内部工作以及为啥不建议使用

春季启动战争log4j2

在春季云数据流中午餐任务后任务执行不工作

春季启动的 logging.config 配置