2014-10-20 26 views
0

我有一个无效的方法,做一些事情。我不在乎它在我的单元测试课上做了什么。然而,当我从我的单元测试类调用它并引发我的测试用例失败时,它会抛出异常。如何忽略使用easymock的私有void方法抛出的异常?

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

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

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

UPDATE

所讨论的方法是它获取由其他进程称为私人无效方法。我不能直接调用它,但我仍然想忽略该私有无效方法引发的异常。

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

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

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

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

并且我调用一些方法在内部调用private void方法。

obj2.methodThatCallsPrivateVoidMethod(); 

并且这不起作用。

+0

如果你想要模拟的方法是私人的,那么你将无法用EasyMock模拟它,你需要使用[PowerMock](https://code.google.com/p/powermock/ )。话虽如此,从你问题的其余部分看,在MyObject上有一个可访问的方法(public,protected,default),你可以模拟出正确的方法吗? – 2014-10-20 07:00:55

+0

是的,但公共方法是我想单元测试的东西。这只是为了让我可以忽略private void方法的结果(特别是在本质上存在的异常) – user3590506 2014-10-20 17:52:29

+0

在这种情况下,您必须使用PowerMock生成MyObject的部分模拟来模拟私有方法。这是可能的,但有点尴尬。 [这是它的文档](https://code.google.com/p/powermock/wiki/MockPrivate) – 2014-10-21 07:16:01

回答

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的问题。