Laravel 5 模型模拟
Laravel 5 Model mocking
我在不同的地方看到了一些关于这个的帖子,他们似乎都有相似的答案。然而,对于我来说,我无法让 Mockery 对象正常工作。
属性模型如下所示
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Attribute extends Model {
public function test()
{
return (new \App\Models\Value())->hello();
}
}
像这样的价值模型
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Value extends Model
{
public function hello()
{
return 'goodbye';
}
}
PHPUnit 测试看起来像这样
use App\Models\Attribute;
class AttributeModelTest extends TestCase
{
public function testThing()
{
$mock = Mockery::mock('\App\Models\Value');
$mock->shouldReceive('hello')
->once()
->andReturn('hello');
$this->app->instance('\App\Models\Value', $mock);
$a = new \App\Models\Attribute();
$return = $a->test();
var_dump($return);
}
}
PHPUnit 输出 'goodbye',虽然我在模拟中告诉它 return 'hello' 但它没有。知道我可能做错了什么吗?
如评论中所述:
将 return (new \App\Models\Value())->hello();
更改为 return (\App::make('App\Models\Value'))->hello();
并且在测试中:$a = new \App\Models\Attribute();
和 $a = App::make('App\Models\Attribute');
所以 Laravel 将通过容器解决依赖关系
我在不同的地方看到了一些关于这个的帖子,他们似乎都有相似的答案。然而,对于我来说,我无法让 Mockery 对象正常工作。
属性模型如下所示
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Attribute extends Model {
public function test()
{
return (new \App\Models\Value())->hello();
}
}
像这样的价值模型
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Value extends Model
{
public function hello()
{
return 'goodbye';
}
}
PHPUnit 测试看起来像这样
use App\Models\Attribute;
class AttributeModelTest extends TestCase
{
public function testThing()
{
$mock = Mockery::mock('\App\Models\Value');
$mock->shouldReceive('hello')
->once()
->andReturn('hello');
$this->app->instance('\App\Models\Value', $mock);
$a = new \App\Models\Attribute();
$return = $a->test();
var_dump($return);
}
}
PHPUnit 输出 'goodbye',虽然我在模拟中告诉它 return 'hello' 但它没有。知道我可能做错了什么吗?
如评论中所述:
将 return (new \App\Models\Value())->hello();
更改为 return (\App::make('App\Models\Value'))->hello();
并且在测试中:$a = new \App\Models\Attribute();
和 $a = App::make('App\Models\Attribute');
所以 Laravel 将通过容器解决依赖关系