2015-04-15 4 views
0

Скажем, у нас есть класс, как это:Testing установка частной переменной

public class Foo 
{ 
    private String results; 
    private DataFetcher fetcher; 

    public void setFetcher(DataFetcher fetcher) 
    { 
     //handle exceptions, empty results, etc. 
     this.fetcher = fetcher; 
    } 

    public void acquireResults(int id) 
    { 
     this.results = fetcher.fetchData(id); 
    } 

    public String printResults() 
    { 
     return "Your results: " + this.results;  
    } 

} 

Мы хотим проверить, что, когда мы называем acquireResults, что частная переменная results создается правильно.

Как бы проверить это?

Я мог бы добавить геттер, чтобы я мог получить доступ к results при тестировании.

Или я мог бы использовать отражение для доступа к нему (но это похоже на излишний?).

Или, возможно, вы хотите утверждать, что я не должен его тестировать/что-то не так с моим дизайном.

ответ

0

Несомненно, создавая публичный геттер, создавая защищенный геттер и проверяя подкласс, который подвергает защищенный метод или просто использует отражение - все допустимые параметры в некоторых случаях.

Но если это (как я предполагаю) упрощение какой-либо сложной системы, вы должны подумать об изменении дизайна; спросите себя, что вы пытаетесь проверить;

  1. значение «результаты»?
  2. , называющий «сборщик»?
  3. вызов «сборщик» с правильным вводом?

Возможно, вам нужны 3 теста. Возможно, вам нужно больше классов с общедоступными методами, которые выполняют одну конкретную задачу, и их можно протестировать напрямую.

0

Много способов тестирования, зависит от ресурсов и времени, которое у вас есть.

Вы можете добытчик и поместить операторы печати,

вы можете использовать утверждает

Если у вас есть доступ, то я голосую за помощью отладчика и запустить программу, которая использует свой код в вопросе, установка точки останова и проверка фактической рабочей программы. Тогда ваш код останется «чистым» от крутильного движения, что вам нужно будет сделать для других стратегий отладки (установка утверждений, методов отладки и инструкций печати по всему).

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