我想通过PowerMock嘲笑私有方法,但在我expectPrivate方法,我没有所有的参数,我的单元测试有权访问(一些参数创建调用这个私有方法的方法)。因此,当我需要填写expectPrivate方法字段时,我无法这样做,并且我的单元测试不起作用。有什么办法可以解决这个问题吗?PowerMock嘲笑有限的数据访问私有方法
感谢
编辑:对不起我的可怕的解释。我写了一些代码来演示我的意思。
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方法,因为我无法重新创建富aFoo的foobar的方法创建的。它会给我一个错误,说我为测试创建的对象与进入私有方法的对象不一样。
你能详细说明吗?显示代码始终是一个优点。 – oldrinb 2012-08-07 04:09:48
像,使用expectPrivate的参数需要它嘲笑的方法的参数吗?我只是无法访问这些论点。例如我正在模拟方法foobar(obj x,obj y)作为foo类的一部分,我无法填充我的参数expectPrivate(foo.class,“foobar”,x,y),因为我无法访问到我的单元测试方法中的对象x和y – KWJ2104 2012-08-07 04:49:26
那么为什么你不能访问你打算嘲笑的对象呢? – oldrinb 2012-08-07 04:51:50