2010-11-30 97 views
0

我試圖用PowerMock來模擬一些第三方代碼,我遇到了一個擴展方法的問題。擴展方法PowerMock問題

所以我會給出一個片段顯示發生了什麼。

ClassA extends ClassB{ 
    super(); 
} 

ClassB extends ClassC{ 
    super(); 
} 

ClassC { 
    String methodA(); 
} 

現在我試圖嘲笑ClassA,因爲這是我的代碼正在使用。模擬創造正常,但是當我添加的期望,像這樣:

expect(mockClassA.methodA()).andReturn("string"); 

我得到以下錯誤:

java.lang.IllegalStateException: missing behavior definition for the preceding method call methodA() at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:43) at org.powermock.api.easymock.internal.invocationcontrol.EasyMockMethodInvocationControl.invoke(EasyMockMethodInvocationControl.java:95) at org.powermock.core.MockGateway.doMethodCall(MockGateway.java:104) at org.powermock.core.MockGateway.methodCall(MockGateway.java:167) at .ClassC.methodA(ClassC.java)

對我缺少的是什麼有什麼想法?我知道我沒有包含太多的細節,但是我已經準備好使用符號進行測試的ClassA,我也只是將重放放在一個地方,以確保在設置期望之前我沒有錯誤地將mockClassA置於錯誤的狀態。

回答

0

我得到的例外是由於期望差而不是類擴展的結果。對錯誤的問題抱歉。

0

我做了這樣的事情,它適用於我,但我不明白爲什麼你需要PowerMock在這裏(你可以做到這一點沒有EasyMock/Mockito它)。

@RunWith(PowerMockRunner.class) 
@PrepareForTest(ClassA.class) 
public class ClassATest { 
    @Test 
    public void finalMethodString() throws Exception { 
     ClassA f = PowerMock.createNiceMock(ClassA.class); 
     EasyMock.expect(f.methodA()).andReturn("haha"); 
     EasyMock.replay(f); 
     assertEquals("haha1", f.methodA()); 
    } 
} 


class ClassA extends ClassB{ 
    @Override 
    String methodA() { 
     return "1"; 
    } 
} 
class ClassB extends ClassC{ 
    @Override 
    String methodA() { 
     return "b"; 
    } 
} 
class ClassC { 
    String methodA() { 
     return null; 
    } 
} 
+0

我使用powermock.version = 1.4.6,easymockclassextension = 3.0 – IAdapter 2011-01-04 13:03:16