#java #junit #mockito
Вопрос:
У меня есть моя настройка здесь @Раньше для моего тестового примера
r = RentACat.createInstance();
c1 = Mockito.mock(Cat.class);
Mockito.when(c1.getId()).thenReturn(1);
Mockito.when(c1.getName()).thenReturn("Jennyanydots");
c2 = Mockito.mock(Cat.class);
Mockito.when(c2.getId()).thenReturn(2);
Mockito.when(c2.getName()).thenReturn("Old Deuteronomy");
С моим тестовым случаем как
r.addCat(c1);
r.addCat(c2);
r.addCat(c3);
//Execution Steps
String ret = r.listCats();
//Postconditions
assertEquals("Return string is not equal to expected string with added cats", "ID 1. JennyanydotsnID 2. Old Deuteronomy", ret);
И это моя реализация listCats();
public String listCats() {
// TODO
StringBuilder retBuild = new StringBuilder();
for(Cat c : cats) {
if(c.getRented() == false) {
retBuild.append(c.toString());
retBuild.append("n");
}
}
return retBuild.toString();
}
Тем не менее, когда я запускаю этот тестовый случай, я получаю возвращаемое значение пустой строки.
Я пробовал некоторые вещи, такие как изменение моей реализации listCats();
, чтобы
public String listCats() {
// TODO
StringBuilder retBuild = new StringBuilder();
for(Cat c : cats) {
if(c.getRented() == false) {
retBuild.append(c.toString());
retBuild.append("n");
return retBuild.toString();
}
}
return retBuild.toString();
}
Однако, когда я запускаю это, я получаю только одну из кошек, как и ожидалось, с наблюдаемыми значениями, такими как "Mock for Cat, hashCode: 10523xyz"
Что я делаю не так в своем listCats()
методе?
Комментарии:
1. Откуда это
cats
берется?2. Тебе тоже нужно издеваться
getRented
?3.
if(c.getRented() == false)
вырождается.if(!c.getRented())
4. @Егор в чем-то прав. Если это
Boolean
а, то это может бытьnull
.5. Обратите внимание, что вы также звоните
toString
неgetName
в своем цикле.
Ответ №1:
Да, потому что вам нужно определить toString()
поведение также в издевательском объекте. Строка, которую вы видели toString
, является версией по умолчанию для издевательского объекта. вы можете определить свой, как показано ниже.
Mockit.when(c1.toString()).thenReturn("Jennyanydots");
Mockit.when(c2.toString()).thenReturn("Old Deuteronomy");
Обратите внимание: если Cat
класс-это просто объект POJO с геттером/сеттером, не нужно издеваться над ним, вы просто заполняете все, что хотите, из данных
Комментарии:
1. Спасибо, это то, чего мне не хватало
2. Рад это слышать 🙂