2016-07-13 11 views
0

これは私の問題です:私はSuperClassを拡張するクラスUnderTestをテストしています。 SuperClassにはプライベートマップ( "myMap")とそれを感じるプライベートメソッドがあります。 Imがnew()コンストラクタでUnderTestクラスのインスタンスを作成するとき、スーパークラスのmyMapは初期化されません(現実的には、これはシステム全体のフレームワークによって行われますが、テストのためにはできません)。 マップが== nullであるため、テストImを実行しているときにNullPointerExceptionを受け取りました。 私はinvoke()でメソッドをモックしようとしましたが、私は同じ例外が発生するので何か間違っています。私のミスがjmockitで夕食のプライベートメソッドを模擬することができます

public class UnderTest extends SuperClass 
{ 
    public void methodUnderTest() 
    {.... 
    put(str, obj); 
    ....} 
} 

public class SuperClass 
{ 
    private Map<String, Object> myMap; 

    private void innerMethod (String str, Object obj) 
    {.... myMap.put(str, obj);} 

} 

あるクラスがjmockit

Class ThestSomething{ 

@Mocked 
SuperClas superClass; 

@BeforeMethod 
public void setUp 
{ 
UnderTest underTest = new UnderTest(); 
} 


@Test 
public void testThis() 
{ 
new Expectetions {{ invoke("superClass", "innerMethod", str, obj); }}; 
} 

答えて

0

代わりのモックで走った場合は、テストで正しく初期化されたオブジェクトを作成します。

public class ExampleTest { 
    @Tested HashMap<String, Object> myMap; 
    @Tested(fullyInitialized = true) UnderTest underTest; 

    @Test 
    public void example() { 
     underTest.methodUnderTest(); 

     assertEquals(<expected value>, myMap.get("expected key")); 
     // other assertions... 
    } 
} 
関連する問題