2017-09-05 1 views
1

아래 예제는 올바르게 작동합니다. 문제는 내가 @InjectMocks 주석이 필요하다는 것입니다. 그리고 SpringJUnit4ClassRunner.classMockitoJUnitRunner.class으로 대체하면 모든 것이 깨집니다 (testValue 대신 bar = null).스프링 통합 테스트 : MockitoJUnitRunner를 사용하는 동안 @Value 삽입

수정 방법은 무엇입니까?

//@RunWith(MockitoJUnitRunner.class) // not work (
@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes = FooTest.Config.class) 
@TestPropertySource(properties = { 
     "some.bar.value=testValue", 
}) 
public class FooTest { 

    @Value("${some.bar.value}") 
    String bar; 

    @Test 
    public void testValueSetup() { 
     assertEquals("testValue", bar); 
    } 

    @Configuration 
    static class Config { 

     @Bean 
     public static PropertySourcesPlaceholderConfigurer propertiesResolver() { 
      return new PropertySourcesPlaceholderConfigurer(); 
     } 
    } 
} 

답변

2

는 Mockito 또한 :

@Rule 
public MockitoRule mockito = org.mockito.junit.MockitoJUnit.rule(); 

을가 MockitoJUnitRunner를 사용하는 것은 불가능 상황, 예컨대을 극복하는 규칙을 제공합니다 ... 또는 수동 Mockito를 설정할 수 있습니다 :

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

당신은 ClassRule의 콤보를 할 수와 SpringRunner가하는 같은 기능을 사용하기 위해 규칙해야한다.

@ClassRule 
    public static final SpringClassRule SPRING_CLASS_RULE = new SpringClassRule(); 

    @Rule 
    public final SpringMethodRule springMethodRule = new SpringMethodRule(); 

그런 다음 일반적인 것처럼 MockitoRunner를 사용하십시오.

덧붙여, 항상 Mockito.mock 등으로 의존성을 직접 조롱 할 수 있습니다. 주석이 접근하는 반면 테스트가 간단하지 않은 경우 약간의 성가신 런타임 문제가 발생할 수 있습니다. @InjectMocks의 경우

SpringBoot 프로젝트 내에서 Mockito 러너가 필요한 이유가 궁금하십니까? 필요한 경우 MockBeans를 사용하여 Spring Bean을 조롱 할 수 있습니다. 내가 MockitoRunner를 사용할 필요가 없었던 것처럼 XY 문제와 같은 냄새가납니다.

관련 문제