我正在尝试为@Service带注释的类编写单元测试。我设置了application.properties文件和一个用于访问值的类。
@Component
@ConfigurationProperties
@PropertySource("classpath:application.properties")
public class ApplicationProperties {
private String first_name;
private String last_name;
private String base_url;
public String getFirst_name() {
return first_name;
}
public void setFirst_name(String firstName) {
this.first_name = firstName;
}
public String getLast_name() {
return last_name;
}
public void setFirst_name(String lastName) {
this.last_name = lastName;
}
public String getBase_url() {
return base_url;
}
public void setBase_url(String baseUrl) {
this.base_url = baseUrl;
}
}
我写的测试就是这样
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = { ApplicationProperties.class })
@TestPropertySource(locations="classpath:application.properties")
public class ServiceTests {
@Autowired
private ApplicationProperties applicationProperties;
@Before
private void initializeConfig() {
Mockito.when(applicationProperties.getFirst_name()).thenReturn("Karan");
}
@Test
public void sample_Test() {
MyService myService = new MyService();
String fName = myService.getUserFirstName();
assertEquals(fName, "Karan");
}
}
和方法myService.getUserFirstName就是这样
@Service
public class MyService {
@Autowired
private ApplicationProperties applicationProperties;
public String getUserFirstName() {
return applicationProperties.getFirst_name();
}
}
我尝试了以下tutorial和this,this和this堆栈溢出问题中提供的方法。但是它总是在getUserFirstName方法中将applicationProperties对象设置为null,并引发null值异常。
任何建议我做错了。