测试时如何查看通知?
How to view notices when testing?
我有一个 class 发出非致命通知:
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 自然会将此通知转换为异常,未捕获的异常必然会导致测试失败。
There was 1 error:
1) MyClassTest::testCanFoo
Notice this message.
首先,让我指出,我很高兴能够阅读此通知,这 正是我想要的,但是 未通过测试.
我知道我可以通过 docblock.
的测试
class MyClassTest extends PHPUnit_Framework_TestCase {
/**
* @expectedException PHPUnit_Framework_Error_Notice
*/
public function testCanFoo(){
$obj = new MyClass;
$this->assertTrue($obj->foo());
}
}
但是现在通知被完全吞没了。
PHPUnit 5.5.4 by Sebastian Bergmann and contributors.
. 1 / 1 (100%)
Time: 17 ms, Memory: 4.00MB
OK (1 test, 1 assertion)
如何才能同时通过测试和查看通知消息?
您可以通过这种方式禁止转换为异常:
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());
}
}
使用 Netsilik/BaseTestCase(MIT 许可证)您可以直接测试触发 Errors/Warnings,而无需将它们转换为异常。
您可以测试正确的 Waring/Notice 类型和错误消息:
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');
}
}
干杯。
我有一个 class 发出非致命通知:
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 自然会将此通知转换为异常,未捕获的异常必然会导致测试失败。
There was 1 error:
1) MyClassTest::testCanFoo
Notice this message.
首先,让我指出,我很高兴能够阅读此通知,这 正是我想要的,但是 未通过测试.
我知道我可以通过 docblock.
的测试class MyClassTest extends PHPUnit_Framework_TestCase {
/**
* @expectedException PHPUnit_Framework_Error_Notice
*/
public function testCanFoo(){
$obj = new MyClass;
$this->assertTrue($obj->foo());
}
}
但是现在通知被完全吞没了。
PHPUnit 5.5.4 by Sebastian Bergmann and contributors.
. 1 / 1 (100%)
Time: 17 ms, Memory: 4.00MB
OK (1 test, 1 assertion)
如何才能同时通过测试和查看通知消息?
您可以通过这种方式禁止转换为异常:
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());
}
}
使用 Netsilik/BaseTestCase(MIT 许可证)您可以直接测试触发 Errors/Warnings,而无需将它们转换为异常。
您可以测试正确的 Waring/Notice 类型和错误消息:
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');
}
}
干杯。