我有一个发布非致命通知的课程:
class MyClass {
public function foo(){
trigger_error('Notice this message.', E_USER_NOTICE);
return true;
}
}
这是一个基本的单元测试:
class MyClassTest extends PHPUnit_Framework_TestCase {
public function testCanFoo(){
$obj = new MyClass;
$this->assertTrue($obj->foo());
}
}
当然,PHPUnit会将此通知转换为异常,但未被捕获必然会使测试失败。
有1个错误:
1)MyClassTest :: testCanFoo
请注意此消息。
首先,我要指出,我喜欢我可以阅读此通知, 此 是我想要的,但没有使测试失败。
我知道我可以通过docblock传递测试。
class MyClassTest extends PHPUnit_Framework_TestCase {
/**
* @expectedException PHPUnit_Framework_Error_Notice
*/
public function testCanFoo(){
$obj = new MyClass;
$this->assertTrue($obj->foo());
}
}
但现在通知完全被吞没了。
Sebastian Bergmann和贡献者的PHPUnit 5.5.4。
。 1/1(100%)
时间:17毫秒,内存:4.00MB
好(1次测试,1次断言)
如何才能 通过测试和查看通知消息?
答案 0 :(得分:1)
您可以通过以下方式禁用转换为异常:
class MyClassTest extends PHPUnit_Framework_TestCase {
public function testCanFoo(){
// disable conversion into exception
PHPUnit_Framework_Error_Notice::$enabled = false;
$obj = new MyClass;
$this->assertTrue($obj->foo());
}
}
答案 1 :(得分:0)
使用Netsilik/BaseTestCase(MIT许可证),您可以直接测试触发的错误/警告,而无需将其转换为异常。
您可以同时测试警告/通知类型和错误消息:
composer require netsilik/base-test-case
测试E_USER_NOTICE
:
<?php
namespace Tests;
class MyTestCase extends \Netsilik\Testing\BaseTestCase
{
/**
* {@inheritDoc}
*/
public function __construct($name = null, array $data = [], $dataName = '')
{
parent::__construct($name, $data, $dataName);
$this->_convertNoticesToExceptions = false;
$this->_convertWarningsToExceptions = false;
$this->_convertErrorsToExceptions = true;
}
public function test_whenNoticeTriggered_weCanTestForIt()
{
$foo = new Foo();
$foo->bar();
self::assertErrorTriggered(E_USER_NOTICE, 'The notice string');
}
}
干杯。