簡體   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