首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PowerMock模拟具有有限数据访问权限的私有方法

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

Stack Overflow用户
提问于 2012-08-07 04:02:44
回答 1查看 2.9K关注 0票数 0

我试图通过PowerMock模拟私有方法,但在我的expectPrivate方法中,我没有单元测试可以访问的所有参数(其中一些参数是在调用此私有方法的方法中创建的)。因此,当我需要填充expectPrivate方法字段时,我无法这样做,并且我的单元测试无法工作。有什么办法可以绕过这件事吗?

谢谢

编辑:抱歉,我的解释太糟糕了。我编写了一些代码来演示我的意思.

代码语言:javascript
复制
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");

    }
}

代码语言:javascript
复制
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方法,因为我无法重新创建Foo aFoo,即创建的foobar方法。它将给我一个错误,我为测试创建的对象与进入私有方法的对象不同。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-07 05:59:52

当然,您可以访问调用私有方法的方法中创建的参数。您需要让构造函数返回模拟对象。见http://code.google.com/p/powermock/wiki/MockConstructor

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11839083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档