我有这种方法可以验证单位。我发送字段值,并在其中使用方法创建一个新模型,然后通过接口返回该模型。
public void validate(String unitNumber, Integer unitTypeId, String notes) {
if(!TextUtils.isEmpty(unitNumber)) {
Unit unit = new Unit();
unit.setUnitNumber(unitNumber);
unit.setFlatTypeId(unitTypeId);
unit.setNotes(notes);
view.displayUnitValid(unit);
} else {
view.displayUnitNotValid();
}
}
现在我想用以下代码对这种方法进行单元测试。
@Test public void shouldValidateSinceUnitNumberIsValid() {
// Given
String unitNumber = "1";
// When
presenter.validate(unitNumber, null, null);
// Then
Mockito.verify(view).displayUnitValid(new Unit());
}
我收到以下错误消息:
Argument(s) are different! Wanted:
view.displayUnitValid(
com.rwar.domain.customers.Unit@57cf54e1
);
-> at com.rwar.presentation.work_orders.AddUnitPresenterTest.shouldValidateSinceUnitNumberIsValid(AddUnitPresenterTest.java:73)
很明显,因为我在这里创建一个新的Unit实例,所以出现了问题:
Mockito.verify(view).displayUnitValid(new Unit());
并且在validate()方法中,我创建了Unit的另一个实例。
我该如何解决?
例如,将相同的参数传递给您的验证方法
Unit expected = new Unit()
unit.setUnitNumber(unitNumber);
unit.setFlatTypeId(unitTypeId);
unit.setNotes(notes);
Mockito.verify(view).displayUnitValid(expected);
您可能必须重写Unit
类equals/hashcode方法,以便它们比较其内容而不是实例本身。
您可以使用Mockito check
函数对作为Unit
参数传递的displayUnitValid()
实例进行断言。像这样的东西:
Mockito.verify(view).displayUnitValid(Mockito.check { unit ->
assertEquals(unitNumber, unit.getUnitNumber)
});
关于check
here的更多信息