Ответ
В тестировании мы классифицируем ошибки в зависимости от этапа их возникновения и природы.
1. Ошибка компиляции (Compile-time Error) Дефект в коде, который обнаруживает компилятор. Тестировщик с ним напрямую не работает, но он блокирует запуск.
String text = 123; // Ошибка: несовместимые типы. Нельзя int присвоить String.
2. Ошибка времени выполнения (Runtime Error / Exception) Дефект, проявляющийся при работе программы. Это основной объект поиска в тестировании.
// Пример для теста: деление на ноль
@Test
void testDivision() {
Calculator calc = new Calculator();
// Это вызовет ArithmeticException: / by zero
assertThrows(ArithmeticException.class, () -> calc.divide(10, 0));
}
3. Логическая ошибка (Logical Error / Defect) Программа работает, но выдает некорректный результат. Самый коварный тип ошибок.
// Метод должен считать скидку 10%
public double calculateDiscount(double price) {
// Ошибка: должно быть price * 0.1, а не 0.01
return price * 0.01; // 1% вместо 10%
}
// Соответствующий тест, который этот дефект обнаружит:
@Test
void testDiscountCalculation() {
double price = 1000.0;
double expectedDiscount = 100.0; // 10%
double actualDiscount = calculator.calculateDiscount(price);
assertEquals(expectedDiscount, actualDiscount, 0.01); // Тест упадет
}
4. Ошибка в тесте (Test Failure / Assertion Error) Не дефект в продукте, а указание на то, что фактический результат не соответствует ожидаемому, прописанному в тесте.
@Test
void testUserLogin() {
boolean loginResult = system.login("user", "password123");
// AssertionError, если loginResult == false
assertTrue("Логин должен быть успешным", loginResult);
}