Вопрос:
У меня есть задание, в котором мне нужно создать несколько тестов для моего кода. Мы должны использовать тесты Junit, поэтому я решил сделать положительное и отрицательное тестирование своих методов.
Например, один тест для получения имени из ArrayList У меня есть положительное и отрицательное тестирование:
Postive:
public void testGetNamePositive() { Entry entry1 = new Entry(«Susan Holmes», «122 Harringdale», «Workington», «CA14 2GH»); assertEquals(«Susan Holmes»,entry1.getName()); }
Отрицательный:
public void testGetNameNegative() { Entry entry1 = new Entry(«Susan Holmes», «122 Harringdale», «Workington», «CA14 2GH»); assertFalse( entry1.getName() == «Alison»); }
Тест, о котором я не уверен, таков:
public void testEntryCreated() { Entry entry1 = new Entry(«Susan Holmes», «122 Harringdale», «Workington», «CA14 2GH»); assertNotNull(entry1); }
Есть ли отрицательное испытание на это?
Ответ №1
Предполагается, что публичный конструктор класса классов имеет некоторые аргументы, например, имя не может быть нулевым. Таким образом, вы можете написать отрицательный тест, подобный этому
@Test(expected = NullPointerException.class) public void testCreateEntryWithNameIsNullThrowsNPE() { Entry entry1 = new Entry(null, «122 Harringdale», «Workington», «CA14 2GH»); }
обратите внимание, что я использовал JUnit 4
Ответ №2
Я бы сказал, что тест testEntryCreated уже не нужен. Вы здесь не проверяете поведение своего класса, а скорее способность JVM правильно создавать объекты. Вместо этого сосредоточьтесь на тестировании того, как вы хотите, чтобы ваши объекты вели себя.
Ответ №3
Я не совсем уверен, что вы пытаетесь проверить здесь. Все, что вы сейчас тестируете, состоит в том, что переменная имени устанавливается правильно.
Когда вы тестируете устройство, вы хотите протестировать отдельные методы по отдельности (самый малый тестируемый блок) с отрицательным и положительным входами.
Ваш пример отрицательного теста выглядит следующим образом:
public void testGetNameNegative() { Entry entry1 = new Entry(«Susan Holmes», «122 Harringdale», «Workington», «CA14 2GH»); assertFalse( entry1.getName() == «Alison»); }
Это не отрицательный тест. То, что вы хотели бы проверить на отрицательный, – это, например, что имя не может содержать числа или быть пустой строкой:
public void testGetNameNegative() { Entry entry1 = new Entry(«123», «122 Harringdale», «Workington», «CA14 2GH»); //Expect some behaviour Entry entry1 = new Entry(«», «122 Harringdale», «Workington», «CA14 2GH»); //Expect some other behavior }
То, что вы ожидаете здесь, вероятно, является каким-то исключением, поскольку вы “тестируете” конструктор. Если бы это был метод, вы могли бы ожидать какое-то возвращаемое значение вместо исключения