wmde / psr-log-test-doubles
PSR-3 日志接口的测试双
v3.2.0
2022-05-02 08:10 UTC
Requires
- php: >=8.0
- psr/log: ~3.0|~2.0
Requires (Dev)
- phpstan/phpstan: ^1.4.2
- phpunit/phpunit: ~9.5
- vimeo/psalm: ^4.18.1
README
测试双 用于 PSR-3 日志接口
动机
在 PHP 世界中,大多数人通过 PHPUnit 模拟框架($this->createMock
)创建测试双。请注意,PHPUnit 模拟实际上是一个测试双,而不一定是模拟。虽然这个框架通常很有帮助,但使用它来代替创建自己的测试双也带来了一些成本。
- 工具不理解 PHPUnit 的魔法。您将无法使用自动化重构,例如方法重命名,否则您的测试双会中断。您还会收到不正确的类型警告。
- 当使用
LoggerInterface
时,您的测试将绑定到一个实现细节:如果您使用log
并提供日志级别,或者调用一个快捷方法,例如error
。 - 开发者需要熟悉模拟工具。
- 像断言日志被调用两次并带有预期消息这样简单的事情变得困难。
用法
这个库对单元测试工具无偏见。因此,尽管这些示例使用 PHPUnit,但任何测试工具都可以使用。
断言日志被带有预期消息调用两次
public function testWhenStuffIsDone_loggerGetsCalled() { $logger = new LoggerSpy(); $serviceToTest = new ServiceToTest( $logger /*, other dependencies */ ); $serviceToTest->doStuff( /**/ ); $this->assertSame( [ 'First message', 'Second message' ], $logger->getLogCalls()->getMessages() ); }
断言日志被调用两次
$this->assertCount( 2, $logger->getLogCalls() );
断言第一次日志调用中的消息和日志级别
$firstLogCall = $logger->getFirstLogCall(); $this->assertSame( 'First message', $firstLogCall->getMessage() ); $this->assertSame( LogLevel::ERROR, $firstLogCall->getLevel() );
发行说明
3.2.0 (2022-03-28)
- 添加了
LogCall::isError
- 添加了
LogCall::withoutContext
- 添加了
LogCalls::filter
- 添加了
LogCalls::getErrors
- 添加了
LogCalls::map
- 添加了
LogCalls::withoutContexts
3.1.0 (2022-01-26)
- 添加了
LogCalls::getLastCall
3.0.0 (2022-01-26)
- 添加了对
psr/log
2.x 和 3.x 的支持 - 将最小 PHP 版本从 PHP 7.1 更改为 8.0
- 添加了几个属性、参数和返回类型
- 添加了 Psalm 和 PHPStan CI 以及一级检查的合规性
2.2.0 (2017-05-23)
- 添加了
LoggerSpy::getFirstLogCall
便利方法 - 将最小 PHP 版本从 PHP 7.0 更改为 7.1
2.1.0 (2017-01-17)
LogCalls
现在实现了Countable
2.0.0 (2017-01-16)
LoggerSpy::getLogCalls
现在返回一个LogCalls
实例,它是一个LogCall
的集合- 添加了
LogCalls::getMessages
- 添加了
LogCalls::getFirstCall
1.1.0 (2016-11-11)
- 添加了
LoggerSpy::assertNoLoggingCallsWhereMade
1.0.0 (2016-10-18)
- 初始发布,包含最小化的
LoggerSpy