【发布时间】:2017-06-01 16:53:29
【问题描述】:
我尝试用 Mockery 模拟一个类。 我创建了一个新的 Laravel 项目。
我用内容创建控制器 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));
我得到了正确的文字:成功。
所以,这是失败的模拟注入。
你有办法正确注入我的模拟吗?
【问题讨论】:
标签: php laravel unit-testing testing mocking