我有以下代码要测试:
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为它分配模拟对象。但我不想仅仅为了测试它而改变设计。
请避免建议我改变班级设计。
答案 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
}
}