9

假设我有一堂课

class SomeClass
{
  public void methodA()
  {}

  public void methodB()
  {}

  public void someMethod()
  {
     methodA();
     methodB();
  }
}

我想用 Mockito 测试 someMethod() 的行为。

我能想到的唯一方法是使用 spy();

就像是

SomeClass someClass = spy(new SomeClass());
someClass.someMethod();
InOrder inOrder = inOrder(someClass);
inOrder.verify(someClass).methodA();
inOrder.verify(someClass).methodB();

我是 mockito 的新手,文档说

“真正的间谍应该小心谨慎地偶尔使用,例如在处理遗留代码时。”

因此,也许我遗漏了一些东西,并且有更好(正确)的方法来验证是否调用了 methodA 和 methodB 而无需在测试用例中显式调用它们。

谢谢。

4

2 回答 2

8

是的,spy()适合您的目的。警告是由于调用了真实方法,因此您可能会得到意想不到的结果(例如 - 从银行账户中提取真实资金)

于 2010-09-11T20:57:20.587 回答
1

如果您的代码需要 spy 进行单元测试 - 出了点问题。间谍是代码异味的第一个迹象。在您的示例中,您有两种选择可以避免它:

  1. 您可以避免模拟其中一种方法并测试整个 someMethod。
  2. 如果确实需要模拟 methodA 和 methodB - 您可以将它们移动到单独的类等。
于 2012-05-24T14:45:59.160 回答