Joh*_*ith 5 phpunit output-buffering
我有一个代码要测试:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
这通过了但被标记为有风险的测试:
Test code or tested code did not (only) close its own output buffers
Run Code Online (Sandbox Code Playgroud)
对我来说,看起来我很好地处理了输出缓冲......
一定有一些正在测试的代码干扰了缓冲区。例如,如果被测试的代码打开一个缓冲区并且由于某种原因没有关闭它,那么您最终将得到一个打开的缓冲区。
以下情况将导致有风险的测试:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
首先要做的是使用PHPUnit 输出测试断言:
public function testObjectBuffer(): void
{
$this->expectOutputString('test');
(new ToTest())->testMe();
}
Run Code Online (Sandbox Code Playgroud)
一旦你这样做了,你就会确定被测试的代码正在某处打开一个缓冲区而不是关闭它。
| 归档时间: |
|
| 查看次数: |
805 次 |
| 最近记录: |