0

我正在测试我的 userService 类方法,但我正在测试的方法调用了另一个方法。

@Test
public void testSomething() {
  HelloWorldResponse hwResponse = ....;

  expect(userDaoMock.helloWorldCall(....).andReturn(hwResponse);

  reploy();

  UserResponseCode response = userService.register(user);

  assertEquals(UserResponseCode.OK, response);
}

现在说我的注册方法调用了我的 userService 类中的另一个方法,我该如何模拟该调用?

据我了解,我不能这样做,因为我没有将整个 userService 类包装在一个模拟中,对吗?

更新

当我调试我的注册方法的 junit 测试时,我看到了这个:

SomeThing thing = helloWorldCall(...);  // userService.helloWorldCall(...);

现在方法 helloWorldCall 只返回 userDao 返回的内容,我已经在我的测试中模拟了它,但是由于某种原因,当我跟踪执行时它返回 null,所以 thing == null。

为什么它为空,它不应该具有我的模拟返回的值吗?

下面是 UserService#helloWorldCall 代码,它再次简单地返回 userDao 返回的内容,正如您在上面看到的,它返回了我在单元测试中硬编码的响应。为什么在我跟踪/调试单元测试时它为空?

public HelloWordResponse helloWorldCall(...) {
  return userDao.helloWorldCall(..)
}
4

2 回答 2

0

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

于 2012-11-10T21:26:16.743 回答
0

我正在使用 mockscontrol

private IMocksControl mockMaker;

所以我必须使用

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

它现在可以工作了,因为我有许多不同的模拟对象。

于 2012-11-26T03:07:18.313 回答