如何忽略使用easymock的私有void方法抛出的异常?

时间:2014-10-20 03:22:24

标签: java exception mocking void easymock

我有一个做某事的void方法。我不关心它在我的单元测试课中做了什么。但是,当我从我的单元测试类中调用它时它会抛出异常并导致我的测试用例失败。

如何使用EasyMock模拟此对象,以便在调用此void方法时,忽略它在单元测试中的作用?

例如,假设该对象名为myObject,它有一个名为doSomething()的void方法。 EasyMock不允许我使用'expect',因为它是一个无法返回的void方法。但是当我在我的测试用例中调用这个方法时,它会抛出一个异常(我想完全忽略它)。

我知道这可以通过使用mockito或其他库来实现,但我想使用EasyMock。

更新

有问题的方法是一个私有的void方法,它被其他进程调用。我不能直接调用它,但我仍然想忽略那个私有void方法抛出的异常。

我尝试使用如下建议的漂亮模拟。

MyObject obj = EasyMock.createNiceMock(MyObject.class);
EasyMock.replay(obj);

然后我将此obj设置在另一个包含私有变量的对象中。

MyObject2 obj2 = new MyObject2();
obj2.setMyObject(obj);

我调用了一些在内部调用private void方法的方法。

obj2.methodThatCallsPrivateVoidMethod();

这不起作用。

1 个答案:

答案 0 :(得分:0)

不使用EasyMock,一种常见的方法是在类的可测试版本中覆盖有问题的方法。

假设这是你的班级

class MyClass {
   ...
   public void doSomething() {
    ...
    }
}

在你的测试中这样做:

public class MyTestClass {

   @Test
   public void testThis {
      MyClass myObject = new TestableMyClass();
      ...
      // Now you can invoke methods on myObject and the 
      // doSomething() method will be harmless.
   }

   class TestableMyClass extends MyClass {
      @Override
      public void doSomething {
         // Do nothing.  Thus no exception.
      }
   }
}

请注意,EasyMock可能提供类似的方法,但我不熟悉EasyMock。我知道这对Mockito来说不是问题。