0

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;
    }
}

foob​​ar メソッドが作成した Foo aFoo を再作成できないため、foobar2 メソッドをモックできません。テスト用に作成したオブジェクトが、プライベート メソッドに入ったオブジェクトと同じではないというエラーが表示されます。

4

1 に答える 1

1

プライベート メソッドを呼び出すメソッド内で作成された引数に確実にアクセスできます。コンストラクターがモック オブジェクトを返すようにする必要があります。http://code.google.com/p/powermock/wiki/MockConstructorを参照してください。

于 2012-08-07T05:59:52.790 に答える