具有Mockito的Environment的JUnit模拟无法正常工作,仍然评估为null

我有一个类MyClass拥有@Autowired private Environment env;它。它还具有在public MyFunctionA()中调用的private MyFunctionB()和MyFunctionB(),在中调用env.getProperty(propName),它将从属性文件返回一个字符串值MyFunctionA()作为其计算的一个因素。但是目前,在调试JUnit测试时,如果没有,我将无法模拟环境null。


单元测试类MyServiceTest为MyClass开始列如下:


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();

稍后,在单元测试功能中,它会调用,MyFunctionA()但调试显示MyFunctionB()在进行env.getProperty调用时会遇到NPE 。有什么事吗 测试看起来像这样:


@Test

public void myUnitTest() throws IOException {

    boolean boolFlag = myService.MyFunctionA();

    assertTrue(boolFLag);

}


慕尼黑的夜晚无繁华
浏览 420回答 2
2回答

30秒到达战场

这里有两个问题:您可以通过为@Mock显式分配一个新的(模拟的)值来覆盖由注释创建的模拟对象env。您缺少将@InjectMocks模拟内容注入env到您的myService成员的注释:public class MyServiceTest {    @Mock     Environment env; // issue #1    @InjectMocks // issue #2    MyServiceImpl myService = new MyServiceImpl()    @Before    public void setUp() throws Exception {       Mockito.when(this.env.getProperty("myProperty")).thenReturn("1234,2345");    }    // Tests ...

元芳怎么了

您的对象创建过程中有很多问题。但是,如果您依赖Mockito中的注释,则需要使用运行器MockitoJUnitRunner或调用来初始化对象MockitoAnnotations.initMocks(this);最终配置:public class MyServiceTest {@Mock Environment env;@InjectMocksMyServiceImpl myService;@Beforepublic void setUp() throws Exception {   MockitoAnnotations.initMocks(this);   Mockito.when(this.env.getProperty("myProperty")).thenReturn("1234,2345");}// Tests ...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java