2012-01-07 4 views
0

easyMockを使用してオブジェクト内のメソッドをテストしようとしています。 私はこのような何か:EasyMockでモックメソッドをテストする方法

MyObject myObject = createMock(MyObject.class); 
expect(myObject.someMethod()).andReturn(someReturn); 
replay(myObject); 
myObject.methodIwantToTest(); // here assertion or sth like this 
verify(myObject); 

このようなコードはmethodIwantToTestが期待されていない例外がスローされます。この方法をテストするには?

答えて

4

モックは、テストするクラスの依存関係を置き換えることを意図しています。つまり、クラスAをテストしていてクラスBのメソッドを呼び出す場合は、クラスBを期待された動作でモックするので、Aを単独でテストできます。

クラスをモックすると、あなたはそれを通常使うべきではないので、そのエラーが表示されます。あなたは期待を設定し、別のクラスと一緒にあなたのモックを使用することになっています。 methodIwantToTestが呼び出されるべきであるという期待を設定していないので、呼び出すときにエラーが発生します(フレームワークによって期待されていないため)。

つまり、部分模擬を作成することができます。 this documentationを参照し、特定のメソッドのみをモックする「パーシャル」を探します。

2

Mockは、テスト中のクラス(CUT)の依存関係をシミュレートするために使用されるオブジェクトで、CUTを他のコードとは独立してテストできるようにするオブジェクトです。

利用可能ですが、通常Partial Mocksを使用することはお勧めできません。議論は、あなたのソフトウェアの設計が良いときに部分的なモックを使う必要はないということです。しかし、一部のシナリオでは、部分モックを使用することが重要な場合があります。あなたの場合、以下のように部分的な嘲笑を行うことができます:

@Test 
public void testSomething(){ 
    MyObject myObject = createMockBuilder(MyObject.class) 
     .addMockedMethod("someMethod").createMock(); 
    expect(myObject.someMethod()).andReturn(someReturn); 
    replay(myObject); 
    myObject.methodIwantToTest(); 
    verify(myObject); 
} 
関連する問題