![](/img/trans.png)
[英]CodeIgniter - where and when should I call $this->load->database()
[英]Should I mock a $this->doSomething() call in unit testing?
我對測試世界很陌生,我正試圖圍繞嘲笑和嘲弄。 我知道如何模擬正在調用的某些類。 幸運的是,Laravel 使這變得非常容易。
隨着時間的流逝,我了解到您將方法划分為例如 Controller 類成更小的塊。 所以這些較小的方法中的每一個或多或少只做一件事,據我所知,更適合測試。
讓我們假設我的 Controller 類如下所示:
class MyController extends Controller
{
public function myMethod($request)
{
$this->validateRequest($request);
$response = App\ModelClass::doSomething();
return response()->json($response)
}
protected function validateRequest($request)
{
// do some validation here
}
}
據我了解,單元測試用於單獨檢查方法,我應該將代碼分成盡可能小的塊,以便於測試它們(因此一種方法只能做一件事等)
在此示例中, myMethod
測試myMethod
並檢查它是否調用其他方法是否是一個好習慣? 我知道這不起作用,但我可以像這樣模擬它嗎? 我應該這樣做嗎?
\Mockery::mock('App\Http\Controllers\MyController')
->shouldReceive('validateRequest')
->once();
不幸的是,您無法攔截非公共方法。 這是單元測試的一部分,因此它應該可以正常運行。 如果您想攔截該方法中的部分邏輯,您應該考慮將其重構為服務類,然后您可以像這樣調用它:
public function myMethod($request)
{
app(RequestService::class)->validateRequest($request);
$response = App\ModelClass::doSomething();
return response()->json($response)
}
然后你可以模擬它:
App::shouldReceive('make->validateRequest') (...)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.