wmde/psr-log-test-doubles

PSR-3 日志接口的测试双

v3.2.0 2022-05-02 08:10 UTC

This package is auto-updated.

Last update: 2024-09-22 10:59:28 UTC


README

Build Status codecov Type Coverage Psalm level Latest Stable Version Download count

测试双 用于 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