【问题标题】:Laravel Mockery - This test did not perform any assertionsLaravel Mockery - 这个测试没有执行任何断言
【发布时间】:2021-08-17 13:15:46
【问题描述】:

我正在尝试创建一个模拟单元测试,但它给了我这个错误

这个测试没有执行任何断言

public function testGetById()
{
    $mock = Mockery::mock(PostService::class)->makePartial();
    $mock->shouldReceive('getById')
        ->withSomeOfArgs(1);
        $mock->getById(1);
}

! get by id→ 这个测试没有执行任何断言 \tests\Unit\PostControllerTest.php:30

测试:1 次冒险时间:0.32 秒警告:不支持 TTY 模式 在 Windows 平台上。

【问题讨论】:

  • 您应该在单元测试中添加断言,例如: $this->assertEqual( ...
  • 我应该使用哪种类型的断言?
  • 你能举个例子吗

标签: php laravel phpunit mockery


【解决方案1】:

很抱歉,我无法 100% 帮助您,我现在无法设置测试项目来尝试此操作,但您可以尝试:

public function testGetById()
{
    $mock = Mockery::spy(PostService::class);
    // Bind the mock to the Service Container so it gets injected (DI)

    // Execute the code that would run that mock
    $mock->shouldHaveReceived('getById')
        ->withSomeOfArgs(1);
}

间谍允许您间谍,如果所需的方法在所需的条件下被调用。如果你mock,你只是在“伪造”它会返回或做什么,如果你spy,你将能够断言方法发生了什么。

official Mockery documentation 上了解更多信息。

【讨论】:

    【解决方案2】:

    有两种选择。

    选项 1:

    • 确保您已使用 `Mockery::close(); 添加了一个 tearDown 方法
    • 然后使用任何断言。
    • 如果您真的不需要,请使用$this->assertTrue(true);

    选项 2:

    您还可以扩展Mockery\Adapter\Phpunit\MockeryTestCase,而不是通常的PHPUnit\Framework\TestCase。这样你根本不需要添加 phpunit 断言。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-18
      • 2013-09-08
      • 1970-01-01
      • 2013-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-15
      相关资源
      最近更新 更多