如何使用EasyMock模拟void方法,然后如何使用assert进行测试?

时间:2018-12-24 12:54:40

标签: java unit-testing easymock

我需要对一个函数进行单元测试,该函数对另一个void方法进行内部调用。

Class TestClass {
    public void testMethod() {
        someOtherClass.testMethod(); // This is void method 
    }
}

我需要模拟someOtherClass.testMethod(),然后使用断言来验证testMethod中的TestClass


抱歉,如果我的帖子令人困惑。让我说得更清楚。我的意图是-

public void testMethodTest() { 
  TestClass tC = new TestClass(); SomeOtherClass obj = EasyMock.createNiceMock(SomeOtherClass.class); 
  tC.set(obj); 
  obj.testMethod(); 
  EasyMock.expectLastCall().andAnswer(new IAnswer() { 
     public Object answer() { // return the value to be returned by the method (null for void) 
       return null; 
     }
  }); 
  EasyMock.replay(obj); 
  tC.testMethod(); // How to verify this using assert. 
}

1 个答案:

答案 0 :(得分:0)

您写的东西正在工作。但是,它过于复杂,您无法验证是否实际调用了void方法。为此,您需要在末尾添加EasyMock.verify(obj);

然后,重要的一点是,如果在重播之前调用void方法,它将记录一次调用。无需添加expectLastCall。另外,您可以使用expectLastCall().andVoid()代替IAnswer

这是我的写法:

@Test
public void testMethodTest() {
  TestClass tC = new TestClass();
  SomeOtherClass obj = mock(SomeOtherClass.class); // no need to use a nice mock
  tC.set(obj);

  obj.testMethod();

  replay(obj);

  tC.testMethod();

  verify(obj); // Verify testMethod was called
}