如何通过Junit中的Test设置和注入属性值

时间:2019-05-08 09:49:03

标签: spring junit

“我的服务”类使用的属性设置为application.properties

@Service
public class Service {
    @Value("${my.prop}")
    private String prop;        
    public Response doWork(String param1,String param2){
       System.out.println(prop);    //NULL!!! 
    }   
}

我想测试一下并设置自己的值:

测试类:

@RunWith(MockitoJUnitRunner.class)
@TestPropertySource(locations = "application.properties",properties = { "my.prop=boo" })
public class ServiceUnitTest {   
    @InjectMocks
    private Service service;    

    @Test
    public void fooTest(){      
        Response re = service.doWork("boo", "foo");
    }
}

但是当我运行测试时,该值为null(甚至不存在于application.properties中的值)。

1 个答案:

答案 0 :(得分:0)

我没有MockitoJUnitRunner的经验,但是我可以使用PowerMockRunner来实现。

使用测试配置设置应用程序上下文,然后将Bean从应用程序上下文自动连接到测试类中。您也不需要@TestPropertySource批注中的“ locations =”位。

@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(SpringRunner.class)
@TestPropertySource(properties = { "my.prop=boo" })
public class ServiceUnitTest {   

    @TestConfiguration
    static class ServiceUnitTestConfig {
        @Bean
        public Service service() {
            return new Service();
        }
    }

    @Autowired
    Service service;

    @Test
    public void fooTest(){      
        Response re = service.doWork("boo", "foo");
    }
}