如何替换phpunit的断言消息?

5

如何替换断言错误信息?如果我调用$this->assertTrue(false, 'message'),它将显示字符串“message”和另一个消息,说明false不是true。我怎样才能只输出我选择的消息?这是否可能?


我想知道你需要这个的原因。你是不是在所有检查中使用相同的断言类型?例如 assertTrue($a == $b) - gontrollez
1
因为到目前为止,我只能通过编写一个继承PHPUnit_Framework_Constraint的类来定义一个带有自定义消息的自定义断言 - 这让人感到很烦恼,尤其是当我可以通过预处理参数来使用其中一个现有约束时。 - Benubird
3个回答

1

当我面对相同问题时,我想到的编程辅助工具是code-crutch。

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

这样做是错误的,因为如果该方法没有失败,它就不算作断言,你可能会有一些风险测试,并且最终的断言总数也会出错。 - David Vander Elst

0

使用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

这是不可能的。

为什么你想这样做呢?我从未遇到过默认消息在任何情况下都没有帮助的情况。自定义消息应该添加信息,而不是替换默认消息。


3
因为如果我想定义一个自定义断言,我不能包装一个现有的断言(例如assertThat),因为它会生成自己的消息。由于最终所有的东西都归结为assertTrue,你会得到像“断言X具有属性Y失败。断言false为true失败”这样令人烦恼且无用的消息。 - Benubird
这取决于每个人的观点,但让我展示一个真实的例子:$this->assertNull($this->router->match($url), "URL '{$url}' matched and should have not"); 在这个例子中,我将看到正常的错误,显示了实际返回的内容,这是有帮助的,并且还有我的自定义错误消息,有助于理解为什么不行。编辑:这个代码片段放在一个名为assertUrlDoesNotMatch($url)的自定义断言中。 - gontrollez
2
难道对于这个断言响应消息,只会是“对象不符合预期的NULL”吗?似乎包含这个信息并没有什么帮助 - 你的例子似乎是一个忽略默认消息的好案例。 - Benubird

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接