cspray / stream-buffer-intercept
一个测试工具,用于捕获发送到流资源的输出。
0.2.1
2024-06-15 11:58 UTC
Requires
- php: ^8.1
Requires (Dev)
- phpunit/phpunit: ^10.0
README
一个PHP测试工具,旨在捕获流输出并方便编写需要写入流系统的单元测试。
安装
composer require --dev cspray/stream-buffer-intercept
使用指南
在某些情况下,您可能想要对写入流的代码部分进行单元测试。一个例子可能是您正在编写测试来确认发送到 stdout
或 stderr
的日志消息。 Cspray\StreamBufferIntercept\StreamBuffer
类允许您轻松捕获发送到这些流以及其他流的输出,以轻松断言您的期望。
让我们看看一个简单的代码示例。
<?php declare(strict_types=1); namespace Cspray\StreamBufferDemo; use Cspray\StreamBufferIntercept\Buffer; use Cspray\StreamBufferIntercept\StreamFilter; use PHPUnit\Framework\TestCase; class MyLogger { private $stdout; private $stderr; public function __construct($stdout, $stderr) { $this->stdout = $stdout; $this->stderr = $stderr; } public function log(string $message) : void { fwrite($this->stdout, $message); } public function logError(string $message) : void { fwrite($this->stderr, $message); } } class MyLoggerTest extends TestCase { private Buffer $stdout; private Buffer $stderr; private MyLogger $subject; protected function setUp() : void{ StreamFilter::register(); $this->stdout = StreamFilter::intercept(STDOUT); $this->stderr = StreamFilter::intercept(STDERR); $this->subject = new MyLogger(STDOUT, STDERR); } protected function tearDown() : void{ $this->stdout->stopIntercepting(); $this->stderr->stopIntercepting(); } public function testLogMessageSentToStdOutAndNotStdErr() : void { $this->subject->log('My stdout output'); self::assertSame('My stdout output', $this->stdout->output()); self::assertSame('', $this->stderr->output()); } public function testLogErrorMessageSentToStdErrAndNotStdOut() : void { $this->subject->logError('My stderr output'); self::assertSame('My stderr output', $this->stderr->output()); self::assertSame('', $this->stdout->output()); } }