PHPUnit中的单元测试-处理多个条件

PHPUnit中的单元测试-处理多个条件,php,unit-testing,phpunit,logical-operators,Php,Unit Testing,Phpunit,Logical Operators,我想使用PHPUnit编写一个测试,其中包括一个检查,以确保某个值是字符串或NULL 好吧,我可以这样写一个测试: if (is_string($value) || is_null($value)) { $result = TRUE; } else { $result = FALSE; } $this->assertTrue($result); 然而,我已经看到PHPUnit有一个logicalOr()方法,我不知道是否应该使用它来进行更“本地”的测试?如果我

我想使用PHPUnit编写一个测试,其中包括一个检查,以确保某个值是
字符串
NULL

好吧,我可以这样写一个测试:

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

$this->assertTrue($result);

然而,我已经看到PHPUnit有一个
logicalOr()
方法,我不知道是否应该使用它来进行更“本地”的测试?如果我应该使用它,我就不知道该怎么做…

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

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

方法名称无疑是不正确的,因为我习惯于Hamcrest,但我认为结构是类似的。

最好的方法是在出现问题时为您提供最有用的输出。在这种情况下,只要你知道哪里出了问题,我认为你这样做并不重要。以下代码将提供有意义的错误消息:

$message = '$value should have been either a string or null, but was actually a '
           .gettype($value);
$this->asertTrue($valueIsEitherStringOrNull, $message);
使用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()
));

你不能写
$result=is_string($value)| is_null($value)
?@lazyberezovsky是的,它可以写得更有效。但这并不是真正的问题——问题在于我是否应该用PHP进行测试,或者我是否可以/应该使用PHPUnits
logicalOr()
方法。我想建议您模拟这两种情况,并分别对它们进行断言。如果你遇到这样的情况,你应该考虑一下你的单元测试可能没有效果。