如何对依赖的 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 语句永远不会“有问题”。他们完全按照他们所说的去做,100% 的时间。无需测试 if 语句。

但是,您应该测试个别场景。

例如:

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

如果第二个测试也失败了,我将不知道这些语句中的哪一个导致了失败

哪个 if 语句导致失败并不重要。如果您正在使用 A&B return false 测试该输入并且它返回 true,那么您已经拥有足够的信息。

当您期待 false 或反之时,无法指出返回 true 的确切行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章