使用 EasyMock 模拟接受参数的接口

Using EasyMock to mock an interface that accepts arguments

我有一个 class MyClass,其中包含调用接口 MyInterface 的构造函数。 MyInterface 包含接受 IntString.

的方法 validator

我需要使用 EasyMock 在 JUnit 测试中模拟来自 MyInterface.validator 的 return Boolean 值。

我在这方面做了几次尝试,当我尝试从 MyClass 调用 MyInterface.validator 时,我只得到 Java 异常。

public class MyClass {

public MyInterface myInterface;
public int test;

public MyClass (int INT, String STRING, MyInterface myInterface) {

    this.myInterface = myInterface;
    this.test = INT;
    myInterface.validator(INT, STRING);

}
}

public interface MyInterface {
public Boolean validator(int INT, String STRING);
}

public class MyClassTest {
MyInterface mockMyInterface;
MyClass myClass;

@Before
public void setUp() throws Exception {
    mockMyInterface = createMock(MyInterface.class);
}

@Test
public void test() {
    myClass = new MyClass(10, "Test", mockMyInterface);
    expect(mockMyInterface.validator(10, "Test")).andStubReturn(true);
    replay(mockMyInterface);
    assertEquals(myClass.test, 10);
    verify(mockMyInterface);
}
}

您必须在使用前配置模拟期望。您的构造函数调用模拟,因此您应该在创建 MyClass 的实例之前配置它。

试试这个:

public class MyClassTest {
  MyInterface mockMyInterface;
  MyClass myClass;

  @Before
  public void setUp() throws Exception {
      mockMyInterface = createMock(MyInterface.class);
  }

  @Test
  public void test() {
    expect(mockMyInterface.validator(10, "Test")).andStubReturn(true);
    replay(mockMyInterface);

    myClass = new MyClass(10, "Test", mockMyInterface);    

    assertEquals(myClass.test, 10);
    verify(mockMyInterface);
  }
}