繁体   English   中英

PowerMock模拟有限数据访问权限的私有方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM