Создание экземпляра перечисления с помощью 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 как переменную класса (в этом случае она должна быть статической, так как метод, к которому она обращается, является статической), а затем назначить ей mocked-объект посредством whiteboxing. Но я не хочу менять дизайн только ради его тестирования.
Пожалуйста, не предлагайте мне изменить дизайн класса.
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
}
}