【问题标题】:How to mock void method using EasyMock and then how to test it using assert?如何使用 EasyMock 模拟 void 方法,然后如何使用断言对其进行测试?
【发布时间】:2018-12-24 12:54:40
【问题描述】:

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

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

我需要模拟someOtherClass.testMethod(),然后使用断言验证testMethodTestClass


对不起,如果我的帖子令人困惑。让我说得更清楚。我的意图是——

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. 
}

【问题讨论】:

  • someOtherClass 与被测类/方法的关系是什么?
  • 您想验证someOtherClass.testMethod() 是否在调用testMethod() 时被调用?
  • someOtherClass 是 SomeOtherClass.java 的实例。 @Vicky - 是的。我想模拟 someOtherClass.testMethod() 以返回某种类型,然后尽可能调用 TestClass 的 testMethod 以匹配先前的返回类型
  • 你说你想模拟 someOtherClass.testMethod() 来返回某种类型,但它的返回类型是 void 所以这是不可能的。我无法理解您为什么要这样做。用于测试 testMethod() ,验证 someOtherClass.testMethod
  • 你说你想模拟 someOtherClass.testMethod() 来返回某种类型,但它的返回类型是 void 所以这是不可能的。我无法理解您为什么要这样做。对于测试 testMethod() ,验证 someOtherClass.testMethod 被调用一次就足够了。但要做到这一点 someOtherClass 必须可注入。该对象是如何创建的。 ?传递给 TestClass 构造函数或通过 setter 方法,还是该方法自己创建此对象?

标签: java unit-testing easymock


【解决方案1】:

你写的东西很有效。但是,它过于复杂,并且您没有验证 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
}

【讨论】:

    猜你喜欢
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    相关资源
    最近更新 更多