0

テストする次のコードがあります。

Public MyClass() {

    public static final boolean myFunc(int param1, String param2, long param3) {

        SomeInterface var1 = SomeEnumImplementingSomeInterface.INSTANCE;
        SomeOtherInterface var2 = var1.getInstanceOfSomeOtherInterface();

        String str = var2.getValue();

        if (str.equals("ABCD"))
            return true;
        else 
            return false;
    }
}

ここでモック化されたオブジェクトを var1 に割り当てる方法はありますか?

私が考えることができる 1 つの方法は、var1 をクラス変数として宣言し (この場合、それにアクセスするメソッドが静的であるため、静的でなければなりません)、ホワイトボックス化によってモック オブジェクトをそれに割り当てます。しかし、テストのためだけにデザインを変更したくありません。

クラス設計の変更を私に提案しないでください。

4

1 に答える 1

1

パッケージまたは保護されたメソッドを使用してvar1値を設定できます。テストでは、必要に応じて、次のようにクラスをオーバーライドしてモックオブジェクトを設定できます。

public MyClass() {

    public static final boolean myFunc(int param1, String param2, long param3) {

        SomeInterface var1 = getVar1();
        SomeOtherInterface var2 = var1.getInstanceOfSomeOtherInterface();

        String str = var2.getValue();

        if (str.equals("ABCD"))
            return true;
        else 
            return false;
    }

    SomeInterface getVar1() {
        return SomeEnumImplementingSomeInterface.INSTANCE;
    }
}

public MyClassTest {

    private MyClass myClassUnderTest = new MyClass() {
        @Override
        SomeInterface getVar1() {
            return SomeEnumImplementingSomeInterface.INSTANCE;
        }
    } 

    public void testMyFunc() {
        // do test stuff with myClassUnderTest
    }
}
于 2013-02-19T17:00:51.590 に答える