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

単体テストのためにコードにスパイが必要な場合 - 何か問題があります。スパイは、コードの匂いの最初の兆候です。あなたの例では、それを回避するための 2 つのオプションがあります。

  1. メソッドの 1 つをモックすることを避けて、someMethod 全体をテストできます。
  2. methodA と methodB を本当にモックする必要がある場合は、それらを別のクラスなどに移動できます。
于 2012-05-24T14:45:59.160 に答える