2015-08-27 124 views
0

我想爲我的春季啓動應用程序添加單元測試。它不起作用,並且會拋出404錯誤。我正在使用1.2.1版本的spring引導並且具有用於spring-boot-starter-test的依賴關係。請讓我知道如果我錯過了一些東西。春季啓動應用程序沒有任何問題。春季啓動junit不工作

這裏是我的代碼,

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

有幾種不同的方法可以繼續。例如:

  1. 您可以更改您的應用程序以使用ServletWrappingController來包裝您的servlet,以便Spring MVC知道它們。
  2. 您可以更改您的測試方法並使用RestTemplate針對真實服務器。您實際上已經根據您的測試類中的WebIntegrationTest註釋開始了真正的服務器。
+0

感謝您的回覆。我如何測試spring boot main()方法? – skumar

+0

這可能更好地解決在一個單獨的問題 –