あなたはスタブですか、それとも嘲笑していますか?
違いは、動作を検証するか、テスト用のデータを提供するかです。あなたは言う:
テストのどこかで setStatus(4) を呼び出した場合。getStatus() が 4 を返すようにします。
これは同時に両方を意味します。setStatus()
が引数 4 で呼び出されたことを確認する必要があります。
verify(mockObject).setStatus(4);
getStatus()
または、呼び出されたときに 4 を返すようにモック オブジェクトを設定します。
when(mockObject.getStatus()).thenReturn(4);
Mockito には、各状況での使用方法を説明するチュートリアルがいくつかあります。テストで両方を実行できると思いますが(ただし、チェックしていません)、理想的にはテストで1つのことをモックするだけでチェックする必要があるため、これは私にとって臭いです。他のすべてはスタブする必要があります。しかし、いつものように、コンテキストがすべてであるため、オブジェクトの一部をスタブして、別の部分の動作を確認できるようにする必要がある場合があります。その場合は問題ありません。
AAA 構文に従い、テストを調整し (つまり、セットアップを実行してwhen
句を指定)、次にアクションを実行 (つまり、テスト対象のオブジェクトでメソッドを呼び出す) してから、アサートを実行します (つまり、verify
ステートメントを指定します) 。
編集
推奨されていませんが、mockito の新しいバージョン (1.8+) では、やりたいことを実行できるようです。Spy を使用して、オブジェクトの部分的なモックを作成できます。この場合、実際のオブジェクトの Spy を作成し、getStatus()
およびsetStatus()
メソッドをスタブ化しないで (実際に呼び出されて使用されるように)、他のメソッドをスタブ化するだけです (または、それらがおそらく呼び出されたことを確認するだけです)。これについては、このページのセクション 13 実際のオブジェクトのスパイ で読むことができます。