我使用PHPUnit对我的函数进行单元测试当代码中出现任何警告时,测试脚本将不会对该函数执行,谁能告诉我如何忽略这些警告并继续测试
发布于 2016-04-10 08:22:48
在每个测试级别执行此操作的有文档记录的策略是,当您的测试调用将触发警告或通知的函数时,使用@
错误抑制操作符。
下面的代码是来自PHPUnit documentation的示例
<?php
class ErrorSuppressionTest extends PHPUnit_Framework_TestCase
{
public function testFileWriting() {
$writer = new FileWriter;
$this->assertFalse(@$writer->write('/is-not-writeable/file', 'stuff'));
}
}
class FileWriter
{
public function write($file, $content) {
$file = fopen($file, 'w');
if($file == false) {
return false;
}
// ...
}
}
发布于 2019-08-14 17:30:36
你不应该忽视警告,它们的存在是有原因的。话虽如此,警告和通知并不是致命的(如果它们是致命的,那么它们将是一个错误)。
您应该在单元测试中测试它,而不是忽略该警告。您可以使用Netsilik/BaseTestCase (麻省理工学院许可证)来执行此操作。使用此PHPUnit扩展,您可以直接测试触发的错误/警告,而无需将其转换为异常:
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 warning string');
}
}
希望这对将来的人有所帮助。
https://stackoverflow.com/questions/8412746
复制相似问题