Laravel 在控制器内模拟服务类
我正在尝试为我的控制器编写一个功能测试。为了简化我的当前情况,假设我的控制器如下所示:Laravel 在控制器内模拟服务类,laravel,testing,mocking,laravel-8,Laravel,Testing,Mocking,Laravel 8,我正在尝试为我的控制器编写一个功能测试。为了简化我的当前情况,假设我的控制器如下所示: public function store(Business $business) { try { (new CreateApplicationAction())->execute($business); } catch (Exception $e) { return response()->json(['message' => 'error'], 500
public function store(Business $business)
{
try {
(new CreateApplicationAction())->execute($business);
} catch (Exception $e) {
return response()->json(['message' => 'error'], 500);
}
return response()->json(['message' => 'success']);
}
我试图实现的是,我不想在集成测试中测试CreateApplication类逻辑,而是想专门为它编写另一个单元测试
有没有一种方法可以简单地说CreateApplicationAction
期望execute()
并绕过它内部的测试?(不执行execute()
中的代码)
我在网上看到人们创建了“MockCreateApplicationAction”类,但如果可能的话,我不想创建另一个类,因为我根本不想在其中包含任何逻辑 可能吗
class CreateApplicationAction
{
public function execute($business) {
dd("A");
// Business Logic...
}
}
因此,当我进行模拟时,永远不应该调用
dd()
。或者我走错了方向?您需要使用Laravels
容器来解析您的类。基本方法是使用resolve()
方法助手。PHP没有依赖注入,因此您需要使用依赖注入,在Laravel
中,容器解决了这一问题
resolve(CreateApplicationAction::class)->execute($business);
在构造函数、控制器方法、作业、事件、侦听器和命令(如果方法名为handle,则为经验法则)上,可以将类注入到参数中,它们将通过容器解析
public function store(Business $business, CreateApplicationAction $applicationAction)
{
try {
$applicationAction->execute($business);
public function store(Business $business, CreateApplicationAction $applicationAction)
{
try {
$applicationAction->execute($business);