【问题标题】:How to replace phpunit assertion message?如何替换 phpunit 断言消息?
【发布时间】:2018-02-09 00:54:06
【问题描述】:

如何替换断言错误消息?如果我打电话给$this->assertTrue(false, 'message'),它将显示字符串“消息”和另一条消息,说明假不是真的。如何让它输出我选择的消息?这甚至可能吗?

【问题讨论】:

  • 我想知道你需要这个的原因。您是否可能对所有检查使用相同的断言类型? Like assertTrue($a == $b).
  • 因为到目前为止,我能找到使用自定义消息定义自定义断言的唯一方法是编写一个扩展 PHPUnit_Framework_Constraint 的类 - 当我只能使用现有的一个时,这很烦人通过预处理参数来约束。

标签: phpunit output assertions


【解决方案1】:

当我遇到同样的问题时,我想到了代码拐杖:

public function assertTrue($condition, $message = '')
{
    if (!$condition) $this->fail($message);
}

【讨论】:

【解决方案2】:

使用 PHPUnit 6,你必须至少有一个断言,所以我建议稍微编辑一下 @avolkov 答案:

public function assertTrue($condition, $message = '')
{

    if (!$condition){
      $this->fail($message); //This will cause test fail with your message
    }
    else{
      $this->anything(); //This will eliminate error which says that your test doesn't have assertion
    }
}

【讨论】:

    【解决方案3】:

    这是不可能的。

    您为什么要这样做?从来没有遇到过默认消息没有任何帮助的情况。自定义消息应添加信息,而不是替换默认消息。

    【讨论】:

    • 因为如果我想定义一个自定义断言,我不能包装一个现有的断言(例如 assertThat),因为它会产生它自己的消息。由于最后一切都归结为 assertTrue,因此您会收到诸如“断言 X 具有属性 Y 失败。断言 false 为真失败”之类的消息,这很烦人而且没有帮助。
    • 这取决于每个人的意见,但让我举一个真实的例子: $this->assertNull($this->router->match($url), "URL '{$url}' 匹配并且不应该");在此示例中,我将看到正常错误,向我展示真正返回的内容,这很有帮助,我的自定义错误消息有助于理解为什么它不正确。编辑:这进入了一个名为 assertUrlDoesNotMatch($url) 的自定义断言
    • 断言响应消息不会只是“对象与预期的 NULL 不匹配”吗?这似乎没有帮助 - 您的示例似乎是您想要忽略默认消息的好案例。
    猜你喜欢
    • 2016-03-05
    • 2013-03-14
    • 2018-01-23
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多