2017-07-15 8 views
1

私はdoReturn()と同様にMockito.whenを使ってメソッドcreateInstanceBを模擬しようとしています。これは常に実際のメソッドを呼び出します。 例:メソッドを模擬したMockitoは実際のメソッドを呼び出します

Class A{ 
public B createInstanceB(any,any){ 
B b= new B(); 
b.api(); 
} 
} 

私は輸入品のため、以下の 輸入org.mockito.Mockitoを使用しています。 import static org.mockito.Mockito。*;

Class ATest{ 
A a ; 
B b; 
@Before 
Public void setup{ 
    a= A.getInstance(); 
    b= mock(B.class); 
} 
@Test 
public void testCreateInstanceB(){ 
Mockito.when(a.createInstanceB(any(),any()).thenreturn(b); 
... 
} 

試しても返される(模擬)。 これについての助けに感謝します。

+0

問題を再現した完全な最小例を投稿してください。あなたのコードを見ないとコードが間違っている理由はわかりません。 –

+0

更新 - JB Nizet – user3754993

+1

投稿したコードが有効なJavaコードではありません。あなたが正しく答えてくれたように、モックではないオブジェクトのメソッドをモックしようとしています。それはうまくいかない。 –

答えて

2

コードの問題点は、模擬ではなくAの実際のインスタンスでMockito.when()を呼び出していることです。 Mockito.when()はモックオブジェクトでのみ動作し、実物では動作しません。

「実際の」オブジェクトでメソッドを「擬似」(スタブ)する必要がある場合は、Mockito.spy()の使用を検討してください。 「スパイ」の使用の詳細については、see this postを参照してください。このような

何かがあなたが望むものに近いものになります。

Class ATest{ 
A a ; 
A aSpy; 
B b; 

@Before 
Public void setup{ 
    a= A.getInstance(); 
    aSpy = Mockito.spy(a); 
    b= mock(B.class); 
} 

@Test 
public void testCreateInstanceB(){ 
Mockito.when(aSpy.createInstanceB(any(),any()).thenreturn(b); 
... 
} 

あなたは、あなたのテストコードでaSpy、ないaを使用する必要があります。

関連する問題