私はMockeryでクラスをモックしようとしています。 新しいLaravelプロジェクトを作成します。php laravel binding mockery instanceが失敗しました
私は内容のコントローラアプリ/ HTTP /コントローラ/ Mockcontroller.phpを作成します。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class Mockcontroller extends Controller
{
function get($id) {
return 'FAILED';
}
}
私はのget()メソッドをモックとしたいので、私は/ファイルにテストを修正しましたこの内容で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
は、私は、この行にDDを交換するときは、この出力
PHPUnit 5.7.5 by Sebastian Bergmann and contributors.
"FAILED"
zsh: exit 1 vendor/bin/phpunit
に取得($ CTRL-> GET(10)); SUCCESS:私は右のテキストを取得
dd($mock->get(10));
次の行によって。
だから、それは失敗したモックインジェクションです。
モックを正しく挿入する方法はありますか?
あなたの答えをありがとう。もともと、私はEloquentリポジトリにモックを作成しましたが、空のLaravelプロジェクトからモックを作成したかったのです。だからコントローラを使う。 $ this-> appにはget()メソッドが含まれていません:PHP致命的なエラー:未定義メソッドを呼び出す/ Foundation/Application :: get()/var/www/to.auzuret/を照らします。 tetsmock/tests/ExampleTest.php on line 27 私はLaravel 5.3を使用しています – jedema
申し訳ありません、もちろん '$ app-> make'ではなく$ app-> get'です –
ありがとうございます!そこで、私は、このパスシステムApp \ Controller \を使ってLaravelを含むシステムを短絡しました...もう一度ありがとう – jedema