jeroen / psr-log-test-doubles
PSR-3 日志接口的测试双倍
3.2.0
2022-03-27 22:10 UTC
Requires
- php: >=8.0
- psr/log: ~3.0|~2.0|~1.0
Requires (Dev)
- phpstan/phpstan: ^1.4.2
- phpunit/phpunit: ~9.5
- vimeo/psalm: ^4.18.1
Replaces
README
PSR-3 日志接口的测试双倍
Composer/Packagist: jeroen/psr-log-test-doubles
动机
在PHP世界中,大多数人通过PHPUnits模拟框架($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的支持 LoggerSpy
只支持psr/log
2.x和3.x。为psr/log
1.x添加了LegacyLoggerSpy
- 将最低PHP版本从PHP 7.1更改为8.0
- 添加了多个属性、参数和返回类型
- 添加了Psalm和PHPStan CI以及符合1级检查
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