当我运行PHPUnit时,它涉及测试我写的一个类,它通过PHP'error_log()
或通过Monolog(到一个自定义文件)记录一些东西,记录的内容被转储到命令行。
即使是最简单的形式,我也可以重现这个问题。甚至不确定它是否是一个问题,底线是我想关闭命令行上每个已记录项目的转储。我一直在墙上撞了一会儿,但我似乎无法弄明白。我该怎么关掉它?
事实;
ini_get('error_log');
一个例子;
class OutputOnCliTest extends PHPUnit_Framework_TestCase
{
/** @test */
public function assertAndLogSomething()
{
$this->assertEquals(true, true);
error_log('I do not want to show this on the command line');
}
/** @test */
public function assertAndLogSomethingElse()
{
$logger = new \Monolog\Logger('loggerName');
// no need to set a Monolog handler for this example, just want to log right away
$logger->info('I do not want to show this either');
$this->assertEquals(true, true);
}
}
CLI:
$ ls -la
-rw-r--r-- 1 user group 1150 Dec 7 18:47 phpunit.xml
drwxr-xr-x 4 user group 136 Dec 7 17:44 tests
drwxr-xr-x 17 user group 578 Dec 7 10:05 vendor
$ ./vendor/bin/phpunit
PHPUnit 5.7.2 by Sebastian Bergmann and contributors.
I do not want to show this on the command line
.[2016-12-07 16:53:58] loggerName.INFO: I do not want to show this either
. 2 / 2 (100%)
Time: 24 ms, Memory: 4.00MB
OK (2 tests, 2 assertions)
$
PHPUnit.xml
<phpunit bootstrap="vendor/autoload.php">
<testsuites>
<testsuite name="Unit-Tests">
<directory>./tests</directory>
</testsuite>
</testsuites>
</phpunit>
有人可以帮助我,所以我可以不停地敲打头。 : - )
答案 0 :(得分:0)
也许更多的是设计解决方案,但是我嘲笑Logger对象,所以除了记录器测试本身之外,它实际上并没有记录任何东西(但是如果你像我一样使用Monolog那么你就没有&# 39;无论如何都要测试这个。)
如果您确实想测试是否收到了对浏览器(或其他地方)的输出,您可以试试这个:
/**
* @preserveGlobalState disabled
* @runInSeparateProcess
*/
public function testOutputCanSend()
{
ob_start();
// Do some stuff here that outputs directly, $logger->addInfo() etc
ob_end_clean();
}