我使用Powermock編寫測試用例的我的方法之一,它是這樣的一個非靜態方法不調用一個私有靜態方法:部分嘲諷裏面
class A{
static String hello = "hello";
private void static init(String s){
hello = hello+" "+s;
}
public String getString(String s){
init(s);
return hello;
}
}
class B{
A a = new A();
public String printHelloWorld(){
return a.getString("World")+" from Hawaii";
}
}
我想測試getStringFromA通過使用PowerMock這樣嘲笑類A的方法的getString類B的方法:
@RunWith(PowerMockRunner.class)
@PrepareForTest(A.class)
class TestClass{
@Test
public void testMethod(){
//Mock Creation
A dummy = createPartialMock(A.class,"getString",String.class);
//Expect
expectNew(A.class).andReturn(dummy);
expect(dummy.getString("World")).andReturn("Hello World");
//Replay
replayAll();
//Execute
B b = new B();
b.printHelloWorld();
}
}
的問題是,這似乎並沒有工作。類A的getString()方法不執行私有靜態方法init()。我認爲這是因爲我們在嘲笑方法getString()。但是,如果方法getString()也是靜態執行的,則轉到init方法。 這可能是這種異常的原因。
感謝, 瑪納斯
'init()'是一個靜態方法,它試圖改變'hello',它是一個類成員。你不能在靜態方法裏面引用一個類成員!這段代碼甚至不會編譯。 – SHG
@SHG:感謝您指出。糾正了錯誤。 –