Laravel Mockery - 这个测试没有执行任何断言
Posted
技术标签:
【中文标题】Laravel Mockery - 这个测试没有执行任何断言【英文标题】:Laravel Mockery - This test did not perform any assertions 【发布时间】: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( ... 我应该使用哪种类型的断言? 你能举个例子吗 【参考方案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 断言。
【讨论】:
以上是关于Laravel Mockery - 这个测试没有执行任何断言的主要内容,如果未能解决你的问题,请参考以下文章
在 Laravel 4 中使用 Mockery 模拟自定义类
Laravel 5 - 使用 Mockery 模拟 Eloquent 模型