Создание экземпляра перечисления с помощью 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
    }
}
Другие вопросы по тегам