【发布时间】:2020-05-22 01:52:51
【问题描述】:
我有 2 个文件:MyController.php、APIModel.php
MyController.php
class MyController extends Controller
{
public function post(Request $request)
{
$apiModel = new APIModel;
$apiResponse = $apiModel->GenId();
// Other process such as get data from database, validate data
return view(...);
}
}
APIModel.php
class APIModel extends Model
{
function GenId()
{
$response = $this->callAPI('GET', config('services.api_url.API_URL_GENID'));
}
function callAPI($method, $url, $data = array())
{
$curl = curl_init();
...
try
{
$result = curl_exec($curl);
if (!$result) {
throw new ServiceUnavailableHttpException('Could not connect to interface web service.');
}
}
catch (ServiceUnavailableHttpException $e)
{
throw $e;
}
}
}
现在我想为 MyController@post 执行一个 phpunit 测试
因为是运行phpunit,所以调用代码行“$apiModel->GenId()”时出现错误
是否可以创建一个 dummy 方法来调用一个 dummy 方法而不是调用 $apiModel->GenId()?
我正在使用 Laravel 5.2.45
请帮帮我!
【问题讨论】:
-
您可以创建一个模拟或检查您是否正在运行测试,然后省略 api 调用和检索 is。使用模拟可能是一个更好的选择,但我的建议是通过构造函数或作为方法参数注入 ApiModel - 这样您可以在测试时将其与模拟交换。你必须在容器上注册它。稍后我会尝试为您提供一些示例代码。
标签: php laravel api phpunit stub