我尝试为我的 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/