使用powermock模拟enum实例化

时间:2013-02-19 16:13:21

标签: java unit-testing junit easymock powermock

我有以下代码要测试:

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分配一个模拟对象吗?

我想到的一种方法是将var1声明为类变量(在这种情况下它必须是静态的,因为访问它的方法是静态的),然后通过whiteboxing为它分配模拟对象。但我不想仅仅为了测试它而改变设计。

请避免建议我改变班级设计。

1 个答案:

答案 0 :(得分: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
    }
}