我有一段代码要测试:
class ToTest
{
public function testMe()
{
echo 'test';
}
}
class TestTest extends \PHPUnit\Framework\TestCase
{
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 output testing assertions :
public function testObjectBuffer(): void
{
$this->expectOutputString('test');
(new ToTest())->testMe();
}
一旦你这样做了,你就会确定被测代码正在某处打开一个缓冲区而不是关闭它。
关于Phpunit,测试代码或测试代码没有(仅)关闭自己的输出缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73510300/