2016-01-19 81 views
0

我有這樣的方法:如何使用EasyMock和PowerMock來模擬這種方法?

public Object method() { 
    Object1 object1 = new Object1(); 
    return object2.someMethod(object1); 
} 

現在我的假設來嘲笑是這樣的:

public void methodTest() { 
    Object1 object1 = EasyMock.createMock(Object1.class); 
    PowerMock.expectNew(Object1.class).andReturn(object1); 

    Object2 result = new Object2(); 
    EasyMock.expect(object.someMethod(object1)).andReturn(result); 
    EasyMockHelper.replayMocksFor(this); 
    result = myTestClass.method(); 
    EasyMockHelper.verifyMocksFor(this); 
} 

我得到一個錯誤的預期的方法沒有什麼正在匹配起來調用。它期望一個EasyMock類的object1被傳遞給object.someMethod(),但得到一個非模擬類object1。

希望有道理,並提前感謝您的幫助。

添加一些半真實代碼:

public Object1 methodToTest(Object2 someParameter) { 
    Object3 object3 = new Object3(); 
    object3.setSomeMethod(EnumObject1.FOO); 
    return object4.getSometMethod(object5, someParameter, EnumObject2.BAR, object3).getSomeMethod(); 
} 

object4和object5都自動在類佈線。

+0

不要混用PowerMock和EasyMock – Jens

+0

是上述代碼是否正確?你如何在methodTest()中的'method'和'object'中獲得'object2'? – YoungHobbit

+0

object2是自動裝配的,object是被模擬的類中的實例變量。 –

回答

0

你可以這樣說:

EasyMock.expect(object.someMethod(EasyMock.isA(Object1.class)).andReturn(result); 

這會嘲笑Object1類型的任何對象。所以它會爲你工作。

在這種情況下,你將不再需要使用下面的代碼:

Object1 object1 = EasyMock.createMock(Object1.class);
PowerMock.expectNew(Object1.class).andReturn(object1);

+0

所以我的object.someMethod()實際上需要2個參數,一個是Object1.class,另一個是模擬對象,我得到一個IllegalStateException,說2個匹配器預期,1個記錄。如果我將兩個參數都轉換爲匹配器,那麼我會得到一個意外的方法調用異常,其中的參數與實際的方法調用不匹配。 –

+0

夥計它爲我工作。請再檢查一次,可能你遺漏了一些東西。或者請插入您的整個測試代碼。 – proudandhonour

+0

添加一些反映邏輯的混淆代碼 –

相關問題