【发布时间】:2021-06-10 19:15:00
【问题描述】:
我正在尝试为 Java Spring Boot 1.2.5 中的应用程序编写 JUnit 测试用例。 我有一个服务类,我正在使用 Mockito 编写 JUnit 测试用例。
服务类
class ManualWorkFlowService implements ManualWorkFlowInterface {
@Autowired
private Environment environment;
public void fetchFlowData(Long flowId) {
String config = environment.getProperty("manual.workflow.config");
// Big method body to follow.
}
}
JUnit 类
@RunWith(MockitoJUnitRunner.class)
public class LMVendorServiceTest extends BaseTest {
@InjectMocks
private ManualWorkFlowInterface service = new ManualWorkFlowService();
@Test
public void fetchFlowDataTest() throws Exception {
service.fetchFlowData("1234");
}
}
Junit方法调用了fetchFlowData()方法,但是原方法中的environment.getProperty("manual.workflow.config")抛出空指针异常(因为环境属性为null)
我已经修复了类似下面的问题
@RunWith(MockitoJUnitRunner.class)
public class LMVendorServiceTest extends BaseTest {
@InjectMocks
private ManualWorkFlowInterface service = new ManualWorkFlowService();
@Mock
private Environment mockenvironment;
@Test
public void fetchFlowDataTest() throws Exception {
when(mockenvironment.getProperty("manual.workflow.config")).thenReturn("something");
service.fetchFlowData("1234");
}
}
我的疑问是,
- 我可以配置与原来相同的属性文件吗 应用程序在我的测试类中使用?如果是怎么办?
- 是否有可能,当我从 Junit 调用原始方法 (fetchFlowData(Long flowId)) 时,它会自动获取原始应用程序中配置的应用程序属性文件,以便 environment.getProperty("manual.workflow.config") 工作正常没有在测试类中单独配置属性文件?
我尝试了以下方法,但 @Value 没有获取属性文件值
@RunWith(MockitoJUnitRunner.class)
@PropertySource("file:C:\\properties\\application.properties")
public class LMVendorServiceTest extends BaseTest {
@InjectMocks
private ManualWorkFlowInterface service = new ManualWorkFlowService();
@Mock
private Environment mockenvironment;
@Value("${manual.workflow.config}")
private String property; //Null here
@Test
public void fetchFlowDataTest() throws Exception {
when(mockenvironment.getProperty("manual.workflow.config")).thenReturn(property);
service.fetchFlowData("1234");
}
}
【问题讨论】:
标签: java spring-boot junit mockito