【发布时间】:2014-10-20 03:22:23
【问题描述】:
我有一个做某事的 void 方法。我不在乎它在我的单元测试课上做了什么。但是,当我从我的单元测试类中调用它时它会引发异常,这会导致我的测试用例失败。
如何使用 EasyMock 模拟此对象,以便在调用此 void 方法时忽略它在单元测试中的作用?
例如,假设对象名为myObject,它有一个名为doSomething() 的void 方法。
EasyMock 不允许我使用 'expect',因为它是一个不返回任何内容的 void 方法。但是当我在我的测试用例中调用这个方法时,它会抛出一个异常(我想完全忽略它)。
我知道这可以通过使用 mockito 或其他库来实现,但我想使用 EasyMock。
更新
有问题的方法是一个私有的 void 方法,它被其他进程调用。我不能直接调用它,但我仍然想忽略该私有 void 方法引发的异常。
我已经尝试使用如下建议的 nice mock。
MyObject obj = EasyMock.createNiceMock(MyObject.class);
EasyMock.replay(obj);
然后我将这个 obj 设置在另一个包含它作为私有变量的对象中。
MyObject2 obj2 = new MyObject2();
obj2.setMyObject(obj);
我调用了一些在内部调用私有 void 方法的方法。
obj2.methodThatCallsPrivateVoidMethod();
这没有用。
【问题讨论】:
-
如果您要模拟的方法是私有的,那么您将无法使用 EasyMock 模拟它,您需要使用PowerMock。话虽如此,从您问题的其余部分来看,MyObject 上有一个可访问的方法(公共、受保护、默认),您可以模拟出来,对吗?
-
是的,但是我想对这个公共方法进行单元测试。只是为了让我可以忽略私有 void 方法的结果(尤其是固有的异常)
-
在这种情况下,您必须使用 PowerMock 生成 MyObject 的部分模拟来模拟私有方法。这是可能的,但有点尴尬。 Here's the documentation for it
标签: java exception mocking void easymock