gpt4 book ai didi

php laravel 绑定(bind)模拟实例失败

转载 作者:行者123 更新时间:2023-11-28 21:25:28 26 4
gpt4 key购买 nike

我尝试用 Mockery 模拟一个类。我创建了一个新的 Laravel 项目。

我创建 Controller app/Http/Controllers/Mockcontroller.php 内容:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class Mockcontroller extends Controller
{
function get($id) {
return 'FAILED';
}
}

我想模拟 get() 方法,所以我用以下内容修改了文件 tests/ExampleTest.php :

    <?php

use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

class ExampleTest extends TestCase
{
/**
* A basic functional test example.
*
* @return void
*/
public function testBasicExample()
{
$mock = Mockery::mock(App\Http\Controllers\Mockcontroller::class);
$mock->shouldReceive('get')
->with(10)
->andReturn('SUCCESS');
$this->app->instance(App\Http\Controllers\Mockcontroller::class, $mock);

$ctrl = new App\Http\Controllers\Mockcontroller();
dd($ctrl->get(10));


}
}

但是当我运行以下命令时:

vendor/bin/phpunit

我得到了这个输出

PHPUnit 5.7.5 by Sebastian Bergmann and contributors.

"FAILED"
zsh: exit 1 vendor/bin/phpunit

当我将 dd($ctrl->get(10)); 替换为以下行时:

dd($mock->get(10));

我得到正确的文本:成功。

所以,这是失败的模拟注入(inject)。

你有办法正确注入(inject)我的 mock 吗?

最佳答案

使用 $ctrl = new App\Http\Controllers\Mockcontroller(); 您可以创建一个新的 Controller 实例,而无需使用应用程序容器,因此无需使用模拟。

由于您将 mock 设置为 $this->app->instance(App\Http\Controllers\Mockcontroller::class, $mock); 您需要获取的是 $ this->app->make(App\Http\Controllers\Mockcontroller::class);,但老实说,我看不出你在做什么。

关于php laravel 绑定(bind)模拟实例失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41700314/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com