2012-07-30 34 views
3

我想写一个使用PHPUnit的测试,其中包括一个检查以确保值是stringNULLPHPUnit中的单元测试 - 处理多个条件

据我所知,我可以写这样的测试,像这样:

if (is_string($value) || is_null($value)) { 
    $result = TRUE; 
} else { 
    $result = FALSE; 
} 

$this->assertTrue($result); 

不过,我已经看到了PHPUnit具有一套logicalOr()方法,我不知道我是否应该使用做出更'原生'测试?如果我应该使用它,我不知道如何去做...

+0

不能你写的'$结果= IS_STRING($值) || is_null($值)'? – 2012-07-30 11:55:35

+0

@lazyberezovsky是的,它可以写得更有效率。这并不是真正的问题 - 这是我应该在PHP中进行那样的测试,还是应该使用PHPUnits的'logicalOr()'方法。 – 2012-07-30 11:57:47

+0

我想推荐你模拟这两种情况,并为他们做出单独的断言。 如果您遇到这种情况,请考虑单元测试可能无效。 – 2012-07-30 12:04:54

回答

0

logicalOr返回一个对象,用于构建一个条件,可以传递给assertThat。我无法检查的语法我的手机上,但它应该是这个样子:

self::assertThat(self::logicalOr(self::stringValue(), self::nullValue())); 

的方法名无疑是不正确的,我用Hamcrest,但我自己的结构类似。

0

最好的方法是在出现问题时给你最可用的输出。在这种情况下,只要你知道哪里出了问题,我认为它不太重要。下面的代码将提供一个有意义的错误消息:

$message = '$value should have been either a string or null, but was actually a ' 
      .gettype($value); 
$this->asertTrue($valueIsEitherStringOrNull, $message); 
1

使用PHPUnit的V5.5它(也)以这种方式工作:

if (is_string($value) || is_null($value)) { 
    $result = TRUE; 
} else { 
    $result = FALSE; 
} 

$this->assertThat($value, $this->logicalOr(
    $this->isType('string'), 
    $this->isNull() 
));