Phpunit、测试代码或测试代码并没有(只是)关闭自己的输出缓冲区



我有一个代码要测试:

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();
}

一旦你这样做了,你就会确信测试中的代码是在某处打开缓冲区而不是关闭它

相关内容

  • 没有找到相关文章

最新更新