Java 环境的JUnit mock,Mockito不工作,计算结果仍然为null
我有一个类Java 环境的JUnit mock,Mockito不工作,计算结果仍然为null,java,junit,mockito,autowired,Java,Junit,Mockito,Autowired,我有一个类MyClass,它有@Autowired private Environment在其中。它还有public myfunction(),它调用private MyFunctionB(),在MyFunctionB()中,它调用env.getProperty(propName),将字符串值从属性文件返回到myfunction(),作为其计算中的一个因子。但目前,在调试JUnit测试时,我无法在不获取null的情况下模拟环境 MyClass的单元测试类MyServiceTest如下所示: pu
MyClass
,它有@Autowired private Environment代码>在其中。它还有public myfunction()
,它调用private MyFunctionB()
,在MyFunctionB()
中,它调用env.getProperty(propName)
,将字符串值从属性文件返回到myfunction()
,作为其计算中的一个因子。但目前,在调试JUnit测试时,我无法在不获取null
的情况下模拟环境
MyClass
的单元测试类MyServiceTest
如下所示:
public class MyServiceTest {
@Mock
final Environment env = Mockito.mock(Environment.class);
MyServiceImpl myService;
@Before
public void setUp() throws Exception {
Mockito.when(this.env.getProperty("myProperty")).thenReturn("1234,2345");
myService = new MyServiceImpl();
稍后,在单元测试函数中,它调用myfunction()
,但调试表明MyFunctionB()
在调用env.getProperty
时遇到NPE。有什么不对劲吗?测试如下所示:
@Test
public void myUnitTest() throws IOException {
boolean boolFlag = myService.MyFunctionA();
assertTrue(boolFLag);
}
这里有两个问题:
通过向env
显式指定一个新(模拟)值,可以覆盖由@mock
注释创建的模拟对象
您缺少将模拟的env
注入您的myService
成员的@InjectMocks
注释:
正如@Mureinik所说,您的对象创建过程中出现了一些问题。但是,如果依赖Mockito的注释,则需要使用runnerMockitoJUnitRunner
或调用MockitoAnnotations.initMocks(this)初始化对象代码>
最终配置:
public class MyServiceTest {
@Mock
Environment env;
@InjectMocks
MyServiceImpl myService;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
Mockito.when(this.env.getProperty("myProperty")).thenReturn("1234,2345");
}
// Tests ...
Mockito.doReturn(“12342345”).when(this.env.getProperty(“myProperty”)代码>
public class MyServiceTest {
@Mock
Environment env;
@InjectMocks
MyServiceImpl myService;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
Mockito.when(this.env.getProperty("myProperty")).thenReturn("1234,2345");
}
// Tests ...