提问人:John Smith 提问时间:8/27/2022 更新时间:8/27/2022 访问量:634
Phpunit、测试代码或测试代码没有(仅)关闭自己的输出缓冲区
Phpunit, test code or tested code did not (only) close its own output buffers
问:
我有一个代码要测试:
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
对我来说,看起来我很好地处理了输出缓冲......
答:
4赞
Gerard Roche
8/27/2022
#1
必须有一些正在测试的代码干扰缓冲区。例如,如果被测试的代码打开了一个缓冲区,但由于某种原因没有关闭它,那么你最终会得到一个打开的缓冲区。
以下情况将导致有风险的测试:
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();
}
一旦你这样做了,你就会确定被测试的代码是在某处打开一个缓冲区,而不是关闭它。
评论