Junit провалил тесты, как это исправить?

Таким образом, я использую Junit, новичок в этом. Я пытаюсь проверить методы в классе SetOfUsers следующим образом:

@Test
 public void testFindUserByName() {
 System.out.println("findUserByName");
 String name = "";
 SetOfUsers instance = new SetOfUsers();
 User expResult = null;
 User result = instance.findUserByName(name);
 assertEquals(expResult, result);
 // TODO review the generated test code and remove the default call to fail.

 }

Поэтому я хотел проверить имя пользователя, введенного в Bob, например, в строке имени, подобной этой

String name = "Bob";

так как в классе setOfUsers у меня есть пользователь Bob. В окне вывода отображается это сообщение

Failed: expected:<null> but was:</null>

Что я могу сделать, чтобы сделать этот проход?

4 ответа

Читайте о BDD, это очень хороший метод для простого и удобного написания тестов (чтение)

Разработка, основанная на испытаниях, представляет собой методологию разработки программного обеспечения, которая, по существу, утверждает, что для каждой единицы программного обеспечения разработчик программного обеспечения должен:

  • сначала определите тестовый набор для устройства;
  • затем выполните установку;
  • наконец, убедитесь, что реализация устройства делает тесты успешными.

Хорошо написанное испытание должно иметь GivenWhenThen разделы

(Учитывая) некоторый контекст

(Когда) выполняется какое-то действие

(Тогда) определенный набор наблюдаемых следствий должен получить

Этот стиль известен как SpecificationByExample

Given-When-Then - это стиль представления тестов - или, как говорят его сторонники, - определение поведения системы с использованием SpecificationByExample.

Пример теста

@Test
public void testFindUserByName() {

 // given
 SetOfUsers instance = new SetOfUsers();

 // when
 User result = instance.findUserByName("Bob");

 // then
 assertEquals("Bob", result.getName());

}

Приятно читать:


Этот тест всегда будет терпеть неудачу, потому что последняя строка

fail("The test case is a prototype.");

Причина, по которой ваш тест терпит неудачу, из-за вышеприведенной строки,

assertEquals(expResult, result);

Вы настраиваете свой ожидаемый результат нулю, и результат вы получаете от имени "", вероятно, является пустая строка, а от этого сообщение об ошибке. Вам нужно, чтобы значение expResult было таким же, как и возвращаемое экземпляром instance.findUserByName("Bob"). Однако, если вы не инициализируете экземпляр, который должен быть установлен с Пользовательским объектом, объекты не будут совпадать, поэтому было бы лучше либо высмеять его, чтобы вернуть предварительно созданный объект User чтобы они соответствовали, либо создать объект User с теми же свойствами как тот, который вы ожидаете вернуть, проверьте поля объекта User Object и созданный вами объект User, чтобы убедиться, что они совпадают.

Если вы хотите проверить, что такое пользователь для Bob, измените код на это:

@Test
public void testFindUserByName() {
 System.out.println("findUserByName");
 String name = "Bob";
 SetOfUsers instance = new SetOfUsers();
 User expResult = <create an="" object="" you="" expect="" instance.finduserbyname("bob")="" to="" return="">;
 User result = instance.findUserByName(name);
 //Check fields here.
 assertEquals(expResult.getUserName(), result,getUserName());
 // TODO review the generated test code and remove the default call to fail.

}
</create>


Я не понимаю вопроса, но если вы хотите найти "Боб", почему вы инициализируете имя = ""? Тест должен быть:

@Test
public void testFindUserByName() {
 //Create SetOfUsers
 //Add new User with name Bob
 //FindByUsername("Bob")
 //AssertEqual(User.getName(), "Bob")
}


Вы не можете проверить значение null, используя assertEquals(). Чтобы проверить значение null, используйте:

assertNull(result);

licensed under cc by-sa 3.0 with attribution.