2014-10-20 31 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的問題。