Mockito 模拟对象返回 null

新手上路,请多包涵

我尝试为我的 JSF 应用程序和我正在使用 mockito 的模拟实施一些测试。 (我也用弹簧)

 @RunWith(MockitoJUnitRunner.class)
public class GeneralConfigServiceImplTest  {

    private GeneralConfigService generalConfigService;

    @Mock
    private GeneralConfigDAO generalConfigDAO;

    @Mock
    private GeneralConfig gen;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        generalConfigService = new GeneralConfigService();
        ReflectionTestUtils.setField(generalConfigService, "generalConfigDAO", generalConfigDAO);
    }

    @Test
    public void testAddGeneralConfigCallDAOSuccess() throws DAOException, EntityNullException, IllegalEntityArgumentException, ParseException, EntityPersistException {
        gen = createGeneralConfigs("label", "value");

        generalConfigService.setInstance(gen);
        generalConfigService.persist();
        log.info(generalConfigService.getInstance().toString());
    }
}

测试成功,但是当我想使用 getInstance 方法检索实例时。我之前设置的所有参数(通过之前的构造函数)都是空的。我是模拟对象的新手,这种行为是正常的,还是我的代码有错误?

原文由 flo8433 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

它实际上取决于 GeneralConfigService#getInstance() 的实现。如果你使用 @InjectMocks 注释,你也可以大大简化你的测试代码。

使用 MockitoJUnitRunner 时,您无需初始化模拟并手动注入依赖项:

 @RunWith(MockitoJUnitRunner.class)
public class GeneralConfigServiceImplTest  {

    @InjectMocks
    private GeneralConfigService generalConfigService;

    @Mock
    private GeneralConfigDAO generalConfigDAO;

    @Test
    public void testAddGeneralConfigCallDAOSuccess() {
       // generalConfigService is already instantiated and populated with dependencies here
       ...
    }
}

原文由 hoaz 发布,翻译遵循 CC BY-SA 3.0 许可协议

我的问题是 Test 注释的导入不正确:

曾是

import org.junit.jupiter.api.Test;

正确的

import org.junit.Test;

原文由 FabianoLothor 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏