我有一个代码要测试:
class ToTest
{
public function testMe()
{
echo 'test';
}
}
class TestTest extends PHPUnitFrameworkTestCase
{
public function testX()
{
ob_start();
(new ToTest())->testMe();
$c = ob_get_clean();
$this->assertSame('test', $c);
}
}
这通过了,但被标记为风险测试:
Test code or tested code did not (only) close its own output buffers
对我来说,看起来我很好地处理了输出缓冲。。。
一定有一些正在测试的代码干扰了缓冲区。例如,如果测试中的代码打开了一个缓冲区,但由于某种原因没有关闭它,那么您最终会得到一个打开的缓冲区。
以下情况将导致风险测试:
class ToTest
{
public function testMe(): void
{
ob_start(); // buffer is never closed
echo 'test';
}
}
final class FizzTest extends TestCase
{
public function testObjectBuffer(): void
{
ob_start();
(new ToTest())->testMe();
$c = ob_get_clean();
$this->assertSame('test', $c);
}
}
首先要做的是使用PHPUnit输出测试断言:
public function testObjectBuffer(): void
{
$this->expectOutputString('test');
(new ToTest())->testMe();
}
一旦你这样做了,你就会确信测试中的代码是在某处打开缓冲区而不是关闭它