我正在测试我的userService类方法,但我正在测试的方法调用另一个方法。
@Test
public void testSomething() {
HelloWorldResponse hwResponse = ....;
expect(userDaoMock.helloWorldCall(....).andReturn(hwResponse);
reploy();
UserResponseCode response = userService.register(user);
assertEquals(UserResponseCode.OK, response);
}
现在说我的register方法调用了我的userService类中的另一个方法,如何模拟该调用?
根据我的理解,我无法做到这一点,因为我没有将整个userService类包装在模拟中吗?
更新
当我调试我的注册方法' junit测试,我看到了:
SomeThing thing = helloWorldCall(...); // userService.helloWorldCall(...);
现在方法helloWorldCall只返回userDao返回的内容,我已经在我的测试中模拟了它,但由于某种原因,当我跟踪执行时它返回null,所以thing == null。
为什么它为null,不应该有我的模拟返回的值?
UserService#helloWorldCall代码在下面,它再次简单地返回userDao返回的内容,我已经嘲笑了,如上所示,它返回我在单元测试中硬编码的响应。当我跟踪/调试单元测试时为什么它为空?
public HelloWordResponse helloWorldCall(...) {
return userDao.helloWorldCall(..)
}
答案 0 :(得分:0)
它会杀死此处的范围,但您可以使用Spring并使用不同的上下文。您的实际服务和模拟都实现了相同的接口。在您的测试中,您将连接模拟并在运行时连接实际实现。
答案 1 :(得分:0)
我正在使用mockscontrol
private IMocksControl mockMaker;
所以我必须使用
mockMaker.replay();
mockMaker.verify();
它现在有效,因为我有许多不同的模拟对象。