这是Mockito间谍的正确案例吗?

ank*_*ank 9 java unit-testing mockito

假设我有一堂课

class SomeClass
{
  public void methodA()
  {}

  public void methodB()
  {}

  public void someMethod()
  {
     methodA();
     methodB();
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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

就像是

SomeClass someClass = spy(new SomeClass());
someClass.someMethod();
InOrder inOrder = inOrder(someClass);
inOrder.verify(someClass).methodA();
inOrder.verify(someClass).methodB();
Run Code Online (Sandbox Code Playgroud)

我是mockito的新手,文档说

"应该谨慎使用真正的间谍,例如在处理遗留代码时."

所以也许我错过了一些东西,并且有更好的(正确的)方法来验证methodA和methodB是否被调用而没有在测试用例中显式调用它们.

谢谢.

Boz*_*zho 8

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