следующий сценарий:
public class InputFilter(){
public function isInputValid($input) : bool
{
$isValid = false;
if ($inputA && $inputB && $inputC){
return true;
}
if ($inputD && $inputE){
return true;
}
...
return $isValid;
}
}
public Test(){
//1. TestCase
isInputValid_ValidInputABCGiven_ShouldReturnTrue(){
$input[a => true, $b => true, c => true, d => false, e => false]
assertSame(true, InputFilter->isInputValid, '')
}
//2. TestCase
isInputValid_ValidInputBCGiven_ShouldReturnTrue{
$input[a => false, $b => false, c => false, d => true, e => true]
assertSame(true, InputFilter->isInputValid, '')
}
}
я действительно не знаю, как проверить этот сценарий, вероятно. Давайте представим, что первый тестовый пример терпит неудачу, тогда я не знаю, связано ли это с тем, что первая инструкция if (a && b && c) не удалась или вторая инструкция if (d && e) имеет проблему. если второй тест также не пройден, я понятия не имею, какое из этих утверждений вызвало сбой. Настоящая проблема имеет несколько таких условий if...
есть ли способ проверить метод, чтобы я знал, почему тест не прошел?






Сделать:
if ($inputA && $inputB && $inputC){
return true;
}
Функция, которую вы вызываете в своей функции. А потом:
if ($inputD && $inputE){
return true;
}
Другая функция, которую вы вызываете.
А затем сделать тесты для этих функций
Спасибо за Ваш ответ. Эти функции были бы приватными, потому что не было бы причин делать их видимыми для других классов. И из того, что я читал, тестирование частных методов считается плохой практикой.
Если операторы никогда не "имеют проблем". Они делают именно то, что говорят, в 100% случаев. Нет необходимости проверять операторы if.
Однако вам следует протестировать отдельные сценарии.
Например:
function testResultReturnsFalseForADTrue
{
$input[a => true, $b => false, c => false, d => true, e => false]
assertFalse(InputFilter->isInputValid);
}
if the second test also fails, i would have no clue which of these statements caused the failure
На самом деле не имеет значения, какой оператор if вызвал сбой. Если вы тестируете ввод с A&B, возвращающим false, и он возвращает true, у вас уже достаточно информации.
Невозможно указать точную строку, которая возвращает true, когда вы ожидаете false или наоборот.
Цель модульного тестирования (и тестирования в целом) — найти ошибки. Подход заключается в том, чтобы использовать некоторый код контролируемым образом, чтобы у вас было четкое представление о том, как он себя ведет. Если во время выполнения теста фактическое поведение отличается от ожидаемого, вы должны начать исследование с того места, где возникла проблема. Возможно, вы нашли ошибку или, возможно, тестовый пример неверен! Это показывает, что вы даже не можете предположить, что проблема на самом деле в коде. Часто в случае неудачного теста начинается отладка.
Однако, если у вас есть код, который вы показали, наверняка должно быть гораздо больше тестовых случаев. Схема неудачных и успешных тестов может помочь вам в вашем расследовании. Это критерий качества набора тестов: вы можете легко отследить потенциальную проблему, просмотрев список результатов теста.
Если операторы никогда не "имеют проблем". Они делают именно то, что говорят. Вы не проверяете операторы if. Вы тестируете сценарии.