私は、Mockito、EasyMock、JMock、PowerMockなどのいくつかのJava Mocking APIを読んでいます(そして実験しています)。私はさまざまな理由からそれぞれが好きですが、最終的にはMockitoを決めました。 注記でも、これはではないどのフレームワークを使用するかについての質問 - 実際には模擬フレームワークに質問がありますが、APIは(明らかに)異なっているように見えます。動作確認の価値
多くのことと同じように、チュートリアルを読んだり、サンプルに従ったり、サンドボックスプロジェクトでいくつかのコードサンプルを試したりします。しかし、それを実際に使用する時間が来たら、あなたは泣き始める - それが私の居場所です。
I 実際にはのように、実際には嘲笑のアイデアが好きです。そして、はい、私は、テスト中のクラスにあまりにも強く結びついている "脆い"テストにつながる嘲笑に関する苦情を認識しています。しかし、自分自身でそのような実現に来るまで、私は本当に私の単体テストにいくらかの良い価値を加えることができるかどうかを見る機会を与えたいと思っています。
私は現在、単体テストでモックを積極的に使用しようとしています。 Mockitoは、スタブとモックの両方を可能にします。 getMaxSpeed()
メソッドを持つCar
オブジェクトがあるとします。 Mockitoでは、我々はそうのようにそれをスタブできます
Car mockCar = mock(Car.class);
when(mockCar.getMaxSpeed()).thenReturn(100.0);
この「スタブ」Car
オブジェクトを常に私たちの車の最高速度として100.0
を返すように。
私の問題は、単体テストのテストを書いた後、すでに...私がやっているのは、私の協力者をスタブしていることです!私は単一のモックメソッド(verify
など)を私に利用することはできません!
私は「スタブの状態が」になっていることに気がつきました。このすべての読書、そしてこのすべての興奮は私の単体テストでモックを使用するようになっています。私は行動検証のための単一のユースケースを考えることはできません。
Fowlerのarticleと他のBDD形式の文献をバックアップして再読み込みしましたが、それでもテストダブルコラボレーターの動作検証の価値は「得られません」。
私はを知っています私は何かが不足していることを知っています。例えば、このCar
クラスを使用して、具体的な例(または一連の例もあります)を教えてもらえますか?また、動作検証ユニットテストが状態検証テストに適していることを実証しますか?
正しい方向に任意のナッジをお寄せいただきありがとうございます。
あなたのクラスの1つを教えてください。たとえば、上記でスタブされているCarのクライアントである。おそらく、モックを使ってテストする方法を提案することができます。 –
こんにちはTom - 私はJB Nizetの例がCarよりも好きです。その例は、JBの説明とともに、本当に私の混乱の原因を強調しています。 JBの回答の下に私のコメントはこれを説明しています。 – IAmYourFaja