php laravel绑定模拟实例失败
我试图用嘲弄来嘲弄一个班级。 我创建了一个新的Laravel项目 我创建了控制器app/Http/Controllers/Mockcontroller.php,其中包含以下内容:php laravel绑定模拟实例失败,php,laravel,unit-testing,testing,mocking,Php,Laravel,Unit Testing,Testing,Mocking,我试图用嘲弄来嘲弄一个班级。 我创建了一个新的Laravel项目 我创建了控制器app/Http/Controllers/Mockcontroller.php,其中包含以下内容: <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class Mockcontroller extends Controller { function get($id) { return 'FAILE
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class Mockcontroller extends Controller
{
function get($id) {
return 'FAILED';
}
}
<?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));
}
}
我得到这个输出
PHPUnit 5.7.5 by Sebastian Bergmann and contributors.
"FAILED"
zsh: exit 1 vendor/bin/phpunit
当我替换此行dd$ctrl->get10时;通过以下行:
dd($mock->get(10));
我得到了正确的文本:成功
这就是失败的模拟注射
你有没有办法正确注入我的mock?使用$ctrl=new App\Http\Controllers\Mockcontroller;在不使用应用程序容器的情况下创建控制器的新实例,从而创建模拟
由于您将模拟设置为$this->app->instanceApp\Http\Controllers\Mockcontroller::class,$mock;您需要以$this->app->makeApp\Http\Controllers\Mockcontroller::class;的形式获取is;,但是说实话,我觉得你做的事情没有多大意义。谢谢你的回答。最初,我在一个雄辩的存储库上创建了mock,但我想从blank Laravel项目中创建一个。所以我使用一个控制器。根据您的回答,我得到一个错误,$this->app不包含get方法:PHP致命错误:调用未定义的方法illumb\Foundation\Application::get in/var/www/to.auzuret/tetsmock/tests/ExampleTest.PHP在第27行我使用了Laravel 5.3Sorry,当然它是$app->make,而不是$app->->gethank,谢谢!所以,我用这个路径系统App\Controller\。。。再次感谢
dd($mock->get(10));