2017-04-19 3 views
2

Im書き込みユニットが以下のコードをテストしていますが、私はフィールドを嘲笑していますが、どのように解決できますか?これらのフィールドは@Inject注釈単体テスト中に@InjectフィールドのNPEをどうやって取り除くのですか?

@Component 
interface A { 
    void run(); 
} 

class B { 
    @Inject 
    A a; 

    void someMethod() { 
     a.run(); 
    }} 

class C{ 
    @Inject 
    B b; 

    void anotherMethod() { 
     b.someMethod(); 
    } 
} 

class CTest { 
    @Mock 
    B b; 
    // remains null when invoked in the actual class though its mocked instance is 
    // present here 

    @Mock 
    A a; 
    //// remains null when invoked in the actual class though its mocked instance 
    //// is present here 

    @InjectMocks 
    C c; 

    @Before 
    public void initialize() { 
     MockitoAnnotations.initMocks(this); 
    } 

    @Test 
    public void test() { 
     c.anotherMethod(); 
    } 

} 

で存在しているので、私はフィールドが@Inject Mockitoを使用して注入され、実際のクラスで嘲笑値を取得できますか?

答えて

1

私は、あなたのCTestクラスに@RunWith(MockitoJUnitRunner.class)と注釈を付けて、それが不要になる前の方法を削除する必要があります(@RunWithはモックを注入するトリックを行います)。

UPDATEは実際に私は私のIDEでコードを実行しました。そして、すべてはうまくいきます、NPEはありません。おそらく、あなたの輸入品が正しいことを確認する必要があります。ここではあなたのと比較する鉱山です:

import org.junit.Before; 
import org.junit.Test; 
import org.mockito.InjectMocks; 
import org.mockito.Mock; 
import org.mockito.MockitoAnnotations; 
import javax.inject.Inject; 
import org.springframework.stereotype.Component; 

また、あなたは、このように、この非常にコードがコンパイルされませんあなたの質問では大文字(class Cする必要があります)、とClass Cを宣言した注意を払ってください。

+0

お返事ありがとうございます。このコードはあくまでも例であり、実際のコードではありません。 @RunWith(MockitoJUnitRunner.class)またはMockitoAnnotations.initMocks(this)のどちらかを使用することをお勧めします。 - http://stackoverflow.com/a/28969255/2340345 – user2340345

関連する問題