Java 使用mockito调用方法时,如何检查方法参数?

Java 使用mockito调用方法时,如何检查方法参数?,java,unit-testing,junit,mockito,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.

我正在尝试编写单元测试,它将测试
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
}

为了确保调用了
secondClass
,您应该使用

verify():检查使用给定参数调用的方法 可以使用灵活的参数匹配,例如通过 或者捕获在何处调用的参数

例如:

Mockito.verify(secondClass).doSmth(<arg>);
Mockito.verify(第二类).doSmth(

  • 一个

    • 这是您需要的测试的基本结构。您需要模拟您的
      第二个类
      实例,并将其注入到您的测试类中。我将您的外部类命名为
      Bar

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

      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);
        }
      }