2016-05-27 21 views
1

を満足させることができるテストクラスで私は例外可能な注射剤で

の下に取得しています依存クラス NeedToBeMockedClass

public class ClassToBeTested{ 

private NeedToBeMockedClass needToBeMockedObj; 

public ClassToBeTested(String a, boolean b){ 
    needToBeMockedObj = new NeedToBeMockedClass(String x, int y); 
} 

public String helloWorld(String m, String n){ 
    // do smething 
    needToBeMockedObj.someMethod(100, 200); 
    // do smething more 

    } 
} 

テストケース

@Tested 
private ClassToBeTested classUnderTest; 

@Injectable 
NeedToBeMockedClass mockInstance; 

@Test 
public void testHelloWorld(){ 

new NonStrictExpectations(classUnderTest) { 
     { 
      Deencapsulation.invoke(mockInstance, "someMethod", withAny(AnotherClassInstance.class), 200); 
      result = true; 
     } 
    }; 
//verification  
} 

を模擬するためにJMockitを使用していませんコンストラクタ

java.lang.IllegalArgumentException: No constructor in tested class that can be satisfied by available injectables 

私はテストする必要があるクラスのインスタンスを初期化していないようですそれは嘲笑される必要があります。

+0

私はJMockitに慣れていないんだけど、あなたが新しい(コンストラクタ引数を模擬するか、手動でテスト中のクラスをインスタンス化する必要があるとその時点でコンストラクタ引数を提供枯れることが表示されます。 –

答えて

2

注射可能なモックは、テスト中のコードに渡すことを意図しています。 ClassToBeTestedコードでは、依存関係のインスタンスがコンストラクタまたはメソッドを介して渡されることはできません。代わりに、NeedToBeMockedClassに@Mockedを注釈し、expectationブロックで動作を指定するだけです。 @Mockedアノテーションは、テスト対象のコードで実行されたNeedToBeMockedClassのインスタンスをモックします。

@Test 
public void testHelloWorld(@Mocked final NeedToBeMockedClass mockInstance){ 

    new NonStrictExpectations() { 
     { 
      mockInstance.someMethod(anyInt, anyInt); 
      result = true; 
     } 
    }; 

    ClassToBeTested classToBeTested = new ClassToBeTested("", true); 
    String result = classToBeTested.helloWorld("", ""); 

    //Assertions, verifications, etc. 
} 
関連する問題