【问题标题】:EasyMock Controller Mapping and Status Code TestsEasyMock 控制器映射和状态码测试
【发布时间】:2014-02-21 09:12:14
【问题描述】:

我正在尝试测试我的控制器映射和响应 http 状态代码。因此,我使用的是 RequestMappingHandlerAdapter 和 RequestMappingHandlerMapping。

我的控制器

@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);
    }
}

但我在 Object handler = ... 行中收到 NullPointerException

我只是想测试我的映射,然后从我的响应中检查 HTTP 状态代码。这是正确的方法还是我的测试实现完全错误。对于我需要使用 EasyMock 的测试。作为下一步,我想测试响应状态代码 (response.getStatus()) 是否等于 SC_OK (200)。

感谢任何帮助:)

【问题讨论】:

  • 你没有正确配置,看看hereherehere
  • 为什么我必须上下文配置我的测试?

标签: java spring junit controller easymock


【解决方案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>

【讨论】:

  • 谢谢。为什么它比我的方法更好?我是新手,所以我确定最好的方法是什么:)
  • 好的,我知道了。我正在使用独立项目,因为我的应用程序使用 spring 3.1 运行,但它工作正常。谢谢你的帮助
  • 现在看看。我不确定这是否是一种更好的方法,但它简单、灵活、开箱即用……它使用 Spring test mvc 类来测试 Spring Mvc Controller(这样做听起来很明智)。
猜你喜欢
  • 1970-01-01
  • 2018-08-05
  • 1970-01-01
  • 1970-01-01
  • 2013-11-26
  • 1970-01-01
  • 2019-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多