【发布时间】:2015-10-28 08:23:55
【问题描述】:
我正在使用 JUnit 和 Mockito 编写单元测试。假设我有以下测试类:
@Mock(name="myService")
private myServiceClass myService;
@InjectMocks
private myClassIWantToTest classUnderTest;
final myModelClass myModel = new myModelClass();
@Before
private void setUp(){
MockitoAnnotiations.initMocks(this);
}
@Test
private void testSomething(){
myModel.setCode("someCode");
final MyDataClass myData = new MyDataClass();
myData.setCode("someCode");
doReturn("someCode").when(myModel.getCode());
doReturn(myModel).when(myService.getModelByCode("someCode"));
assertEquals(classUnderTest.getDataByCode(eq("someCode")), myData);
verify(myService.getModelByCode(eq("someCode")), atLeastOnce());
}
我的classUnderTest 中的getDataByCode 方法将模型转换为数据,它应该具有相同的代码。对我来说有点模糊的是单元测试应该从所有依赖项中封装classUnderTest。但现在我有一个问题。我使用 setter 方法 myData 和 myModel 来设置一个值。问题是我在其中为myModel 放了一个DoReturn,但问题是,它不是注入的Mock。不幸的是,我尝试测试的方法没有字段,它在方法内部初始化它,所以我无法真正解决它。
主要的是,当 myModel 的设置器不再起作用时,我上面显示的测试将不再起作用。我想我有三个问题:
我需要多难隔离测试类?我不需要为 assertEquals 使用设置器吗?
是否有另一种方法来处理在我要测试的方法中初始化的对象?处理此类问题的最佳方法是什么?
另外,什么是构建这个的好模式?我目前在测试方法中初始化我预期的 myData 结果。问题是这是一个相当简短和简单的示例,但我有一些类,其中有大量的对象和方法。
【问题讨论】:
标签: java unit-testing testing junit mockito