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, это очень хороший метод для простого и удобного написания тестов (чтение)

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

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

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

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

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

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

Этот стиль известен как 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.