测试我的UserService类,但需要模拟同时调用的方法

时间:2012-11-10 20:59:31

标签: java junit easymock

我正在测试我的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(..)
}

2 个答案:

答案 0 :(得分:0)

它会杀死此处的范围,但您可以使用Spring并使用不同的上下文。您的实际服务和模拟都实现了相同的接口。在您的测试中,您将连接模拟并在运行时连接实际实现。

答案 1 :(得分:0)

我正在使用mockscontrol

private IMocksControl mockMaker;

所以我必须使用

mockMaker.replay();
mockMaker.verify();

它现在有效,因为我有许多不同的模拟对象。