6

メソッドが呼び出されたかどうかを確認する必要がある単体テストを作成しようとしています。JUnit、Mockito、PowerMock を使用しています。

public クラス 請求書
{

  保護されたボイド createInvoice()
  {
    //ここにランダムなもの
    markInvoiceAsBilled("57");
  }

  protected void markInvoiceAsBilled(String code)
  {
    // 請求済みとしてマーク
  }
}

したがって、ここでテスト対象のシステムはInvoiceです。私はこのテストを実行しています:

  パブリック クラス InvoiceTest
  {
    @テスト
    public void testInvoiceMarkedAsBilled()
    {
      請求書sut = new Invoice();
      請求書 sutSpy = spy(sut);

      sut.createInvoice();

      // markInvoiceAsBilled() が呼び出されたことを確認したい
    }
  }

この例は、実際のコードがどのように見えるかの単なる例です....

私の問題は、モック化されたオブジェクトでメソッドが呼び出されたかどうかのみを確認できるとmockitoが言っていることです...しかし、テスト対象のオブジェクトであるため、このオブジェクトをモックしたくありません。テストしているオブジェクトをスパイできることはわかっているので、私が試したことは次のとおりです。

  verify(sutSpy).markInvoiceAsBilled("57");

私がやろうとしていることは不可能ですか?それとも、私はそれについて間違った方法で進んでいますか?

みんな、ありがとう :)

4

2 に答える 2

10

あなたがやろうとしていることが最善の方法であるかどうかはわかりません。

Invoice.createInvoice()が内部のプライベート メソッドを呼び出すことを検証することには関心がありません。markInvoiceAsBilled()代わりに、呼び出しcreateInvoice()によって Invoice オブジェクトの状態が期待どおりに変化することをテストします。つまり、status現在BILLEDまたはそれに類似したものです。

つまり、どのメソッドが呼び出されたかをテストしないでください。createInvoice()このメソッドを呼び出した後、オブジェクトの状態が期待どおりであることをテストしてください。

于 2012-09-14T17:47:17.023 に答える