2013-09-17 7 views
0

Я не могу изменить подпись метода, который должен быть протестирован. Тестовый код выглядит, как показано нижеКак запустить тесты junit для метода, который возвращает void?

Parser test = new Parser(props); 
ArrayList<HDocument> list = new ArrayList<HDocument>(); 

test.parse("https://stackoverflow.com/users/mac/test.xml", list); 
System.out.println("Size of list: "+list.size()); 
assertEquals(5, list.size()); 

parse метод подписи, как показано ниже

public void parse(String filename, Collection<HDocument> docs) 

метод синтаксического анализа работает нормально, но когда я запускаю тестер, размер списка всегда равен 0. Я не могу изменить синтаксический анализ. Как я должен это делать?

Вот класс Parser,

class Parser{ 
private Collection<HDocument> docs; 
    public void parse(String filename, Collection<HDocument> docs) { 
     docs = new ArrayList<HDocument>(); 
     Collection<HDocument> docsFromXml = new ArrayList<HDocument>(); 

      Handler hl = new Handler(); 
      try { 
       docsFromXml = hl.getDocs(filename); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      docs = docsFromXml; 
      System.out.println("Size:" 
        + docs.size()); // This prints the size correctly 

     } 
    } 

} 
+0

У меня есть оператор печати внутри метода синтаксического анализа, и я получаю размер списка как 5 получение напечатал от метода, но оператор печати здесь докладывает как 0 . – NEO

+0

Затем вы должны проверить состояние своего объекта ... –

+0

Как это сделать? – NEO

ответ

5

Если parse предполагается добавить результаты в docs коллекции, а размер docs равен нулю после запуска метода parse, то ваш тест говорит вам что parse сломан, или вы называете это неправильным. Вот какие тесты предположительно: скажите, что что-то не работает.

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

+0

Я добавил код для метода. Что нужно изменить, чтобы список сохранялся после вызова функции в классе тестера. – NEO

+3

Ваша проблема в том, что 'docs = docsFromXml' фактически не изменяет' list' в тесте; он только изменяет его в методе 'parse'. Вы не должны делать 'docs = new ArrayList ' - или 'docs =' ничего - в 'parse'; вместо этого вы должны оставить 'docs' так, как есть, и вызвать' docs.addAll (docsFromXml) 'или что-то, что изменяет _contents_' docs', а не ссылку. –

1

Ошибка - это сам метод синтаксического анализа.

public void parse(String filename, Collection<HDocument> docs) { 
    docs = new ArrayList<HDocument>(); /* First problem here: The method should add values to the parameter not to a new List-Instance */ 
    [...] 
    docs = docsFromXml; // second error here. you overwrite the list again. 

Должно быть что-то вроде:

public void parse(String filename, Collection<HDocument> docs) { 
     if(docs==null) throw new IllegalArgumentException("no list for adding values specified"); 
     if(filename==null) throw new IllegalArgumentException("no filename specified"); 
     Handler hl = new Handler(); 
     try { 
      docs.addAll(hl.getDocs(filename)); 
     } catch (Exception e) { 
      throw new RuntimeEception(e); // never sink exception without proper handling 
     } 

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