2
我在不同的地方看過幾篇文章,他們似乎都有類似的答案。然而,對於我的生活,我無法讓Mockery對象正常工作。Laravel 5 Model mocking
屬性模型看起來像這樣
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的輸出 '再見',值模型,其中我儘管我告訴它在模擬中返回'你好',但事實並非如此。任何想法我可能做錯了什麼?
如果更改,會發生什麼* $ A =解決依賴性new \ App \ Models \ Attribute(); * with * $ a = App :: make('App \ Models \ Value'); *? – marcanuy
如果我這樣做,它將基本上與調用'$ mock-> hello()'相同。不知道是否清楚,但我試圖嘲笑「屬性」使用的響應。如果我調用$ mock-> hello()它會返回期望值'hello' – Catharsis
你說得對,我在兩個類之間感到困惑,我認爲它應該能夠工作,如果你改變* return(new \ App \ Models \ Value )) - > hello(); *和* return(App :: make('App \ Models \ Value')) - > hello(); *在測試中:* $ a = new \ App \ Models \ Attribute (); * with * $ a = App :: make('App \ Models \ Attribute'); *所以Laravel將通過容器解析依賴關係。 – marcanuy