2011-03-08 8 views
4

私はテストしたいいくつかのクラス(クラスA)のメソッド - getSomethingAmount()を持っています。 this getSomethingAmount()メソッドのロジックは、set bSetに依存します。これは、クラスAの初期化時にコンストラクタで渡される です。たとえば、 Set bSetにStatus.OKのオブジェクトが2つ含まれている場合、getSomethingAmount()は に戻る必要があります。 Mockitoでこの状態を正しく確認するにはどうすればよいですか? 正しい方法はMockitoで確認する

は今、私はJUnitのアサーションと getSomethingAmount()メソッドの結果を主張し、その後BSETにそれらを入れて、2 Bクラス型のオブジェクトをスタブ - それは、 に動作しますが、それは「真」Mockitoの方法のように私には見えていません。

答えて

1

予想される動作についての説明から、単体テスト方法のようにかなり固い方法で聞こえます。 「真Mockitoの道」とは、私が何をしたいことのようなものであるとします。これは、設定とテストオブジェクトの初期化は、あなたがテストをしたい任意の副作用を持っていないことを、仮定の下で

Set mockBSet = mock(Set.class); 
stub(mockBSet.size()).toReturn(2); 
A testObjectA = new A(mockBSet); 
Assert.assertEquals(testObjectA.getSomethingAmount(), 2); 

考慮に入れる(たとえば、常にデフォルトの "somethings"を追加します)。この場合、スタブを外してテスト中のメソッドをアサートすると、セットのサイズに等しい値が返されます。

1

コレクションではなくオブジェクトをモックします。それ以外の場合、テストは壊れやすくなり、実装を変更すると中断されます。たとえば、サイズメソッドを使用するのではなく、セット内のオブジェクトをループする必要があると判断した場合などです。

B b = mock(B.class); 
A target = new A(new HashSet<B>(Arrays.asList(b, b))); 
Assert.assertSame(2, target.getSomethingAmount()); 
関連する問題