54

クラスの静的フィールドを設定する方法を見つけるのに苦労しています。基本的には次のようになります。

public class Foo{
    // ...
    private static B b = null;
}

ここで、B は別のクラスです。

以外にPowerMockでこれを行う方法はありますsetInternalStateFromContext()か? コンテキスト クラス メソッドを使用すると、1 つのフィールドを設定するのに少しやり過ぎに思えます。

ありがとう。

4

6 に答える 6

108
Whitebox.setInternalState(Foo.class, b);

null以外の値を設定、クラスが。のフィールドが1つしかない場合に限り、機能しますB。その贅沢に頼ることができない場合は、フィールド名を指定nullし、設定するタイプにキャストする必要があります。その場合、次のように書く必要があります。

 Whitebox.setInternalState( Foo.class, "b", (B)null );
于 2012-01-18T14:09:41.153 に答える
5

あなたは単に行う:

Whitebox.setInternalState(Foo.class, b);

ここで、b は、設定する B のインスタンスです。

于 2011-03-22T19:24:36.750 に答える
1

getAllStaticFieldsそれらを使用して設定することができます

例:

YourFieldClass newValue;
final Set<Field> fields = Whitebox.getAllStaticFields(YourClass.class);
        for (final Field field : fields) {
            if (YourFieldClass.class.equals(field.getType())) { // or check by field name
                field.setAccessible(true);
                field.set(YourClass.class, newValue);
            }       }
于 2013-09-02T09:22:07.297 に答える