2014-02-21 34 views
1

我試圖測試我的控制器映射和響應http狀態代碼。因此,我正在使用RequestMappingHandlerAdapter和RequestMappingHandlerMapping。EasyMock控制器映射和狀態代碼測試

我的控制器

@Controller 
@RequestMapping(value ="/user") 
public class AdminSpringController { 

    @Autowired 
    public UserAdminService userService; 

    private final Logger log = LoggerFactory.getLogger(AdminSpringController.class); 

    @RequestMapping(method = RequestMethod.GET, consumes = "application/json", produces = "application/json") 
    @ResponseStatus(HttpStatus.OK) 
    public List<User> getUsers() { 

     log.trace("Request to get all users."); 

     return userService.getUsers(); 
    } 
} 

和我的測試類:

public class AdminSpringControllerTests { 

    AdminSpringController cut; 

    private MockHttpServletRequest request; 
    private MockHttpServletResponse response; 
    private RequestMappingHandlerAdapter adapter; 
    private RequestMappingHandlerMapping handlerMapping; 

    @Test 
    public void testGetSc() throws Exception{ 

     adapter = new RequestMappingHandlerAdapter(); 
     handlerMapping = new RequestMappingHandlerMapping(); 

     MockHttpServletRequest request = new MockHttpServletRequest(); 
     request.setMethod("GET"); 
     request.setRequestURI("/user"); 
     request.addHeader("Accept", "application/json"); 

     MockHttpServletResponse response = new MockHttpServletResponse(); 

     Object handler = handlerMapping.getHandler(request).getHandler(); 

     ModelAndView mav = adapter.handle(request, response, handler); 

     assertNotNull(mav); 
    } 
} 

但是我卻越來越在行對象處理的NullPointerException異常= ...

我只是想測試我的映射,然後檢查我的響應中的HTTP狀態代碼。這是正確的方法還是我的測試實施完全錯誤?對於我需要使用EasyMock的測試。下一步我想測試響應狀態碼(response.getStatus())是否等於SC_OK(200)。

THX任何幫助:)

+1

你沒有正確配置,採取看[這裏](http://static.springsource.org/spring/docs/2.5.x/reference/testing .html)和[這裏](http://www.devx.com/Java/Article/30067),[這裏](http://blog.trifork.com/2012/12/11/properly-testing-spring -mvc-controllers /) – Rembo

+0

爲什麼我需要上下文配置我的測試? – vicR

回答

1

我用SpringMVC使用的測試方法,用EasyMock的,這是一個很好的方法混合。

@ContextConfiguration("ProjectFacadeTest-context.xml") 
@RunWith(SpringJUnit4ClassRunner.class) 
public class AdminSpringControllerTests { 
... 
private MockMvc mockMvc; 
... 
@Before 
public void setUp() { 
    this.mockMvc = MockMvcBuilders.standaloneSetup(imageController).build(); 
} 

EasyMock.expect(mockPersistedProjectService.getImages(EasyMock.anyLong())).andReturn(images); 
EasyMock.replay(mockPersistedProjectService); 
    MvcResult result = 
      this.mockMvc.perform(get("/resources/projects/1000/images")).andExpect(content().type("application/json")) 
        .andExpect(status().isOk()).andReturn(); 
MockHttpServletResponse response = result.getResponse(); 
//VERIFY RESPONSE 
EasyMock.verify(mockPersistedProjectService); 

XML文件

<bean id="mockArtifactService" class="org.easymock.EasyMock" 
    factory-method="createStrictMock" primary="true"> 
    <constructor-arg value="com.xxxxxx.service.ArtifactService" /> 
</bean> 
+0

thx。爲什麼這是我的更好的方法?我是新來的這個東西,所以我敢肯定什麼是最好的方法:) – vicR

+0

好吧,知道我明白了。我正在使用獨立項目,因爲我的應用程序使用Spring 3.1運行,但它工作正常。 thx爲您提供幫助 – vicR

+0

現在就來看看吧。我不確定這是不是一種更好的方法,但它很簡單,靈活,可以直接使用......並且它使用Spring測試mvc類來測試Spring Mvc控制器(聽起來像是這樣做是明智的)。 – Chexpir