如何测试在内部创建新对象的presenter方法?

问题描述 投票:0回答:2

我有这种方法可以验证单位。我发送字段值,并在其中使用方法创建一个新模型,然后通过接口返回该模型。

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的另一个实例。

我该如何解决?

android junit mockito android-testing
2个回答
1
投票

例如,将相同的参数传递给您的验证方法

Unit expected = new Unit()
unit.setUnitNumber(unitNumber);
unit.setFlatTypeId(unitTypeId);
unit.setNotes(notes);
Mockito.verify(view).displayUnitValid(expected);

您可能必须重写Unitequals/hashcode方法,以便它们比较其内容而不是实例本身。


0
投票

您可以使用Mockito check函数对作为Unit参数传递的displayUnitValid()实例进行断言。像这样的东西:

Mockito.verify(view).displayUnitValid(Mockito.check { unit ->
    assertEquals(unitNumber, unit.getUnitNumber)
});

关于check here的更多信息

© www.soinside.com 2019 - 2024. All rights reserved.