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 吗?

我能想到的一种解决方法是将 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 回答