2015-01-23 4 views
0

은 내가 autowire가 개체, 다음 클래스를 테스트 할 때 작동하지 않습니다주입 조항

@RunWith(PowerMockRunner.class) 
public class ProviderTest { 

    @Mock(name="service") Service service; 
    @Mock Score score; 
    @InjectMocks Provider provider = new SearchResultProvider(); 

    @Before 
    public void setup() { 
     when(service.process()).thenReturn(score); 
    } 

    @Test 
    public void my_test() { 

     provider.execute(); // It fails, because service.process() returns null 

     // Other code here 
    } 

    // Other tests here 
} 

을 그러나, 다음과 같이 내 테스트를 생성

public class Provider { 

    @Autowired 
    private Service service; 

    public Provider() {} 

    public Provider(final Service service) { 
     this.service = service; 
    } 

    // Other code here 

} 

테스트를 실행하면 실패합니다. 모든 것이 무시됩니다. (...)가 무시되는 절을 제외하고는 괜찮습니다. 이로 인해 provider.execute() 호출에서 테스트가 실패합니다. 이 함수 안에서 service.process()에 대한 호출이 실행되고 "점수 모의 (mock)"가 반환 될 것으로 예상됩니다. 그러나 null 값이 대신 반환됩니다.

내가 잘못 했습니까?

+0

:

나는 마지막 방법으로 코드를 가정합니다

테스트가 definalized 할 수있는 클래스를 준비하지 않으면 Service

public class Service { public final Score process() { throw new NullPointerException("lol"); } } 

그런 다음 코드는 통과하지 것이다 PowerMock과 Mockito의 이상한 조합. 왜 둘 다? 나는 당신이 @RunWith (MockitoJunitRunner.class)를 원하지 않을 것이라고 생각한다. –

+0

네, 그럴 것입니다 .... Powermockito는 혼자서는 사용할 수 없습니다. 나는 모키 토의 위에 그것을 사용한다. – user1883212

답변

0

샘플 코드는 powermock이 필요하지 않음을 보여줍니다. 일부 코드는 final이기 때문에 PowerMock이 있다고 가정합니다. 그러나 시험은 defalized 될 수업을 준비하지 않습니다. 당신이하고있는

@RunWith(PowerMockRunner.class) 
@PrepareForTest(Service.class) 
public class ProviderTest { 
    ... 
}