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的注释,则需要使用runner
    MockitoJUnitRunner
    或调用
    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 ...