2013-02-19 4 views
0

Я следующий код для проверки:Mock перечисление конкретизации с помощью 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

Похоже, вы пытаясь проверить, как возвращается метод 'var1.getInstanceOfSomeOtherInterface()'. Зачем вам нужно издеваться над перечислением? –

+0

Это хорошая идея для разработки классов, чтобы их можно было легко протестировать. – greuze

+0

@BheshGurung Я пытаюсь проверить значение, возвращаемое 'var2.getValue()'. Я упростил фактический класс. Некоторые другие значения передаются этой функции getValue(). – rajneesh2k10

ответ

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 
    } 
} 
+0

Спасибо за ответ greuze. Но у меня нет доступа к этим интерфейсам. На самом деле это API-интерфейсы. Я хочу знать, есть ли способ, с помощью которого я могу установить значение var1 с некоторым другим значением? – rajneesh2k10

+0

Я не понимаю, я не менял никакого интерфейса. Вы имеете в виду, что вы не можете изменить класс MyClass? – greuze

+0

О, извините за создание путаницы здесь. Я имел в виду, что я не хочу менять класс. 'getVar1()' должен быть создан только для тестирования. Есть ли другой выход? – rajneesh2k10

 Смежные вопросы

  • Нет связанных вопросов^_^