Как выполнить модульное тестирование зависимых операторов if?

следующий сценарий:

 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. Вы тестируете сценарии.

dustytrash 04.04.2019 20:07
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
489
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Сделать:

if ($inputA && $inputB && $inputC){
       return true;     
    }

Функция, которую вы вызываете в своей функции. А потом:

if ($inputD && $inputE){
  return true;     
}

Другая функция, которую вы вызываете.

А затем сделать тесты для этих функций

Спасибо за Ваш ответ. Эти функции были бы приватными, потому что не было бы причин делать их видимыми для других классов. И из того, что я читал, тестирование частных методов считается плохой практикой.

KicksheepSon 04.04.2019 20:14
Ответ принят как подходящий

Если операторы никогда не "имеют проблем". Они делают именно то, что говорят, в 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 или наоборот.

Цель модульного тестирования (и тестирования в целом) — найти ошибки. Подход заключается в том, чтобы использовать некоторый код контролируемым образом, чтобы у вас было четкое представление о том, как он себя ведет. Если во время выполнения теста фактическое поведение отличается от ожидаемого, вы должны начать исследование с того места, где возникла проблема. Возможно, вы нашли ошибку или, возможно, тестовый пример неверен! Это показывает, что вы даже не можете предположить, что проблема на самом деле в коде. Часто в случае неудачного теста начинается отладка.

Однако, если у вас есть код, который вы показали, наверняка должно быть гораздо больше тестовых случаев. Схема неудачных и успешных тестов может помочь вам в вашем расследовании. Это критерий качества набора тестов: вы можете легко отследить потенциальную проблему, просмотрев список результатов теста.

Другие вопросы по теме