2016-06-22 3 views
0

Предположим, у вас есть классКак функция unit-test, использующая глобальную переменную?

class NeedToTestThisClass{ 
    private String string1; 
    .... 
    .... 

    private void needToTestThisMethod(){ 
     if(string1.equals("a")){ 
      ... 
     } 
     else{ 
      .... 
      } 
    } 
} 

Как я могу проверить этот метод с различными значениями строки? Строка не имеет сеттера и не включена в конструктор. Я не могу изменить код. У меня есть powermock. Вопрос прост, но не может понять путь. Благодарю.

ответ

3

Вы можете использовать PowerMock обойти Инкапсуляция

@Test 
public void test() { 
    NeedToTestThisClass tested = new NeedToTestThisClass(); 
    WhiteBox.setInternalState(tested,"string1", "someValue"); 
    Whitebox.invokeMethod(tested, "needToTestThisMethod"); 
    //here verify something 
} 
1

Как правило, эти типы сценариев проверяются путем тестирования общедоступного метода, который фактически использует эти частные методы. В общем, попробуйте протестировать поток, который мутирует переменную string1 и в свою очередь ваши частные методы коснутся тестов.

+0

это намного сложнее, чем мой пример. единственное инициирование String - ответ сервера. И мне нужно протестировать его, не спрашивая сервера. –

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