[英]PowerMock mocking private methods with limited data access
我正在嘗試通過PowerMock模擬私有方法,但是在我的ExpectPrivate方法中,我沒有我的單元測試可以訪問的所有參數(某些參數是在調用此私有方法的方法中創建的)。 因此,當我需要填寫ExpectPrivate方法字段時,我無法這樣做,並且我的單元測試不起作用。 有什么辦法可以解決這個問題?
謝謝
編輯:對不起,我的解釋很糟糕。 我已經寫了一些代碼來演示我的意思。
import java.lang.reflect.Method;
import org.easymock.EasyMock;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.easymock.PowerMock;
import org.powermock.api.support.membermodification.MemberMatcher;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest(Foo.class)
public class FooTest
{
@Test
public void testFoobar() throws Exception{
Foo x = new Foo("hi");
PowerMock.mockStaticPartial(Foo.class, "foobar2");
Method[] methods = MemberMatcher.methods(Foo.class, "foobar2");
PowerMock.expectPrivate(Foo.class, methods[0], x).andReturn("hi");
PowerMock.replay(Foo.class);
Foo.foobar("hi");
}
}
和
public class Foo
{
public String name;
public Foo(String aString){
name = aString;
}
public static String foobar(String aString){
Foo aFoo = new Foo("hi");
aString = aString + foobar2(aFoo);
return aString + " blah";
}
private static String foobar2(Foo aFoo){
return "hi" + aFoo.name;
}
}
我無法模擬foobar2方法,因為無法重新創建該foobar方法。 這會給我一個錯誤,說我為測試創建的對象與進入私有方法的對象不同。
您當然可以訪問在調用private方法的方法內部創建的參數。 您需要讓構造函數返回模擬對象。 請參閱http://code.google.com/p/powermock/wiki/MockConstructor 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.