Как выполнить юнит тест зависимостей if? - PullRequest
0 голосов
/ 04 апреля 2019

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

 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) имеет проблему. если второй тест также не пройден, я бы понятия не имел, какое из этих утверждений вызвало сбой. Настоящая проблема имеет несколько таких условий, если ...

есть ли способ проверить метод, чтобы я знал, почему тест не удался?

Ответы [ 3 ]

1 голос
/ 04 апреля 2019

Если заявления никогда не "имеют проблемы".Они делают именно то, что говорят, 100% времени.Не нужно проверять утверждения.

Однако вы должны протестировать отдельные сценарии.

Например:

function testResultReturnsFalseForADTrue
{
     $input[a => true, $b => false, c => false, d => true, e => false]
     assertFalse(InputFilter->isInputValid);
}

, если второй тест также не пройден, я бы понятия не имел, какое из этих утвержденийвызвало ошибку

Не имеет значения, какой оператор вызвал ошибку.Если вы проверяете, что входные данные с A & B возвращают false, а он возвращает true, у вас уже достаточно информации.

Невозможно указать точную линию, которая возвращает истину, когда вы ожидаете ложь или наоборот.

1 голос
/ 17 апреля 2019

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

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

0 голосов
/ 04 апреля 2019

Марка:

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...