使用mockito进行方法调用时如何检查方法参数?

时间:2015-03-09 09:42:16

标签: java unit-testing junit mockito

我正在尝试编写测试fillA方法的单元测试。我需要验证doSmth使用正确初始化的a字段进行调用。 这是一个例子。

SecondClass secondClass = new SecondClass();

public void execute() {
  A a = new A();
  fillA(a);
  secondClass.doSmth(a);
}

private void fillA(A a) {
  a.setFirstField("first field");
  a.setSecondField("second field");
}

class SecondClass {
  public void doSmth(A a) {
    // doSmth
  }
}

class A {
  private String firstField;
  private String secondField;

  // getters and setters
}

2 个答案:

答案 0 :(得分:2)

要确保调用secondClass,您应该使用Mockito.verify

  

verify():检查使用给定参数调用的方法   可以使用灵活的参数匹配,例如通过any()的任何表达式   或者使用@Captor来捕获调用哪些参数。

例如:

Mockito.verify(secondClass).doSmth(<arg>);

如果您想检查a字段是否已正确初始化,<arg>可能是:

  • A的实例(new A("first field", "second field")),如果A定义了合适的equals

      

    使用equals()方法“

    比较传递的参数
  • 自定义A ArgumentMatcher

  • ArgumentCaptor

答案 1 :(得分:0)

这是您需要的测试的基本结构。您需要模拟您的SecondClass实例并将其注入您正在测试的课程中。我已将您的外部类命名为Bar

此代码假定您在.equals()类上实现A方法。

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;

@RunWith(MockitoJUnitRunner.class)
public class BarTest {

  @Test
  public void testAIsCorrectlyInitialized() throws Exception {
    SecondClass secondClass = mock(SecondClass.class);
    Bar bar = new Bar();
    bar.setSecondClass(secondClass);

    A expected = new A();
    // here, populate "expected" with correct values

    bar.execute();

    // Verify call (assumes A implements a proper equals)
    verify(secondClass).doSmth(expected);
  }
}