java - Mockito 模拟对象返回 null

标签 java testing junit mockito

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

@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 方法检索实例时。我之前(通过之前的构造函数)设置的所有参数都是空的。 我是模拟对象的新手,所以这种行为正常吗,还是我的代码有错误?

最佳答案

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

当使用 MockitoJUnitRunner 时,您无需手动初始化模拟和注入(inject)依赖项:

@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
       ...
    }
}

关于java - Mockito 模拟对象返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16570029/

相关文章:

java - 在被调用方法中查找方法调用者

java - Wildfly 15 从 jax rs 登录用户获取 Singleton 中的 EJBContext

使用TFS 2013普通版进行性能测试

java - 不使用 Log4J 测试 Slf4j 创建的日志消息

java - Mockito:如何在没有模拟的情况下使用when(instance.meth).thenAnswer

java - 如何通过 Java 使用 Selenium RC 执行基本 URL 后打开另一个 URL

java - 在 Java 中防止实例化的正确方法

java - Spring @ResponseBody Json 循环引用

unit-testing - 测试 Mongoose Node.JS 应用程序

ruby-on-rails - 通过删除 tmp 文件(或任何此类文件?)来加速 rspec