2017-04-19 1 views
2

Im 필기 단위는 아래 코드를 테스트합니다. Im이 필드를 조롱하더라도 NPE를 얻습니다. 어떻게 해결할 수 있습니까? 이러한 필드는 @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

내 생각 엔 이라는 클래스에 주석을 달고 불필요하게되기 때문에 사전 방법을 제거해야합니다 (@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

관련 문제