有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有一个类MyClass,它包含一个调用接口MyInterface的构造函数MyInterface包含一个方法validator,该方法接受一个Int和一个String

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

我已经多次尝试过这个put,当我试图从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);
}
}

共 (1) 个答案

  1. # 1 楼答案

    在使用它之前,必须配置模拟预期。您的构造函数调用mock,因此您应该在创建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);
      }
    }