【问题标题】:Unit Testing in PHPUnit - Handling Multiple ConditionsPHPUnit 中的单元测试 - 处理多个条件
【发布时间】:2012-07-30 11:52:26
【问题描述】:

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

AFAIK,我可以这样写这样的测试:

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

$this->assertTrue($result);

但是,我看到 PHPUnit 有一个 logicalOr() 方法,我不知道我是否应该使用它来进行更“原生”的测试?如果我应该使用它,我不知道该怎么做......

【问题讨论】:

  • 你不能写$result = is_string($value) || is_null($value)吗?
  • @lazyberezovsky 是的,它可以更有效地编写。但这并不是真正的问题 - 我是否应该在 PHP 中进行那部分测试,或者我是否可以/应该使用 PHPUnits logicalOr() 方法。
  • 我想建议您模拟这两种情况并为它们分别做出断言。如果您遇到这种情况,请注意您的单元测试可能无效。

标签: php unit-testing phpunit logical-operators


【解决方案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()
));

【讨论】:

    【解决方案2】:

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

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

    方法名称肯定不正确,因为我习惯于 Hamcrest,但我的结构是相似的。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-18
        • 2022-09-27
        相关资源
        最近更新 更多