PhpUnit:测试方法调用时的自定义错误消息

PhpUnit:测试方法调用时的自定义错误消息,php,phpunit,Php,Phpunit,目前,我正在为框架编写测试,测试失败时,我们通常会使用自定义错误消息,为调试添加一些有用的信息: $this->assertEquals($check, $result, 'Class::method returned the wrong result with argument XXX'); 但是,我希望在检查函数调用时自定义错误消息: $mock->expects($this->any())->method('foobar')->w

目前,我正在为框架编写测试,测试失败时,我们通常会使用自定义错误消息,为调试添加一些有用的信息:

$this->assertEquals($check, $result, 
             'Class::method returned the wrong result with argument XXX');
但是,我希望在检查函数调用时自定义错误消息:

$mock->expects($this->any())->method('foobar')->with($this->equals('dummy'));
当上述断言不正确时,我得到标准消息。

我在PhpUnit文档中搜索了一下,但是我找不到自定义错误消息的方法,我遗漏了什么吗?

这不是故意的,但是你可以(ab)使用这种方法,PhpUnit引发了一个预期失败:它抛出一个
PhpUnit\u框架\u预期失败异常

因此,只要这些内部构件不发生变化1,您就可以使用:

$mock->expects($this->any())->method('foobar')->with($this->equals('dummy'));
try {

   // your test code here

} catch (\PHPUnit_Framework_ExpectationFailedException $e) {
    $this->fail('your custom message here');
}
请注意,如果您对同一测试代码有多个期望,那么就不再那么容易了,您必须检查
$e->getMessage()
,并相应地更改消息。这是一个冗长的级别(以及错误的来源),我不会承诺仅仅更改已经非常解释的消息



1) phpunit mock objects包的当前版本:3.0.6。请参见

另一个选项是手动检查调用信息。不确定如何检查参数,但下面是一个检查调用计数的示例

$myMock = $this->getMockBuilder(MyClass::class)->getMock();
$matcher = $myMock ->expects($this->once())->method('myFunctionToCount')->getMatcher();
//execute code that calls myFunctionToCount on $myMock
$this->assertEquals(1, $matcher->invocationMatcher->getInvocationCount(), "Assertion message goes here");
这在某种程度上是测试运行程序在内部执行的操作,但是可以让您控制断言消息

它并不完美,因为您需要保持expects计数和assert计数同步