2010-12-21 5 views
1

У меня есть следующий метод void, и я не знаю, как его проверить с помощью теста JUnit.Java-тестирование метода с помощью JUnit (void)

public void removeFriend(String rf) 
{ 
    boolean found = false; 
    int i = 0; 

    while(i < friendList.size() && !found) 
    { 
     if(friendList.get(i).equals(rf)) 
     { 
      found = true; 
     } 
     else{ 
      i++; 
     } 
    } 

    friendList.remove(i); 
} 
+0

С чем это связано? На что похож остальной класс? – OrangeDog

ответ

2

предположительно friendList - это поле в классе, где был определен метод.

Так тест:

  1. Создать экземпляр класса и заполнить список друзей
  2. вызова removeFriend с строки, которые должны соответствовать.
  3. утверждают, что friendList больше не содержит друга.

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

Редактировать: его интересный вопрос, который вы задавали в комментариях. Я обычно очень четко с такого рода вещи, так что я бы

List<String> friendList = new ArrayList<String>(); 
friendList.add("friend1"); 
friendList.add("friend2"); 

// assert before actually calling the method under test to make sure my setup is ok 
assertEquals(2, friendList.size()); 

// theObj is an instance of the class you are testing 
theObj.friendList = friendList; 

// call the method under test 
theObj.removeFriend("friend1"); 

// be explicit, the list should now have size1 and NOT contain the removed friend 
assertEquals(1, friendList.size()); 
assertFalse(friendList.contains("friend1"); 

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

+0

Спасибо, это нужно сделать i с assertEquals? не совсем уверен, как заполнить утверждение. – Mael

+0

@Mael я отредактировал мой ответ. – hvgotcodes

0

Добавить друзей, независимо от того, что этот объект, утверждают, что они есть. Вызовите removeFriend(), утвердите, что тот, который вы удалили, не существует.

1

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

BTW: Ваш метод

  • появляется, чтобы удалить первую запись, если совпадений не найдено. Это предназначено?
  • взорвался бы, если бы не было записей.
  • будет взорваться, если любые записи в friendList равны нулю
  • в противном случае делает то же самое, что и friendList.remove (rf);

Я бы написал тест для всех этих условий.

Главное, что нужно искать, - это все условия, при которых ваш метод может сломаться, а не просто ситуация, когда он может работать.

4

Прежде всего, знаете ли вы, что вы можете заменить весь метод на friendList.remove(rf);? Он будет делать точно то, что заявляет имя метода (и, как гарантируется, уже тщательно протестировано).

Что касается тестирования, то даже самые догматические сторонники «чистых» модульных испытаний не утверждают, что каждый метод класса на языке OO должен быть проверен в полной изоляции. В противном случае вы не сможете полностью протестировать OO-код, а модульное тестирование будет ограничено функциональными языками.

Итак, что вы делаете в тесте, создайте объект класса, который содержит этот метод, используйте его конструктор или сеттеры, чтобы поместить его в определенное состояние, на котором может работать метод, а затем вызвать метод, а затем проверить, что после этого объект находится в ожидаемом состоянии. Более конкретно:

  • Создать объект класса
  • положить несколько записей в friendList
  • вызова removeFriend() с одной из записей
  • тест, что эта запись больше не присутствует
0

Вы могли бы найти изучение стиля программирования по контракту. Он хорошо работает с «тестовым развитием» (TDD). Вкратце, вы описываете и документируете, что метод мутатора предназначен только для значений, возвращаемых его доступными (общедоступными и защищенными) методами getter.

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