【发布时间】:2021-03-03 16:46:57
【问题描述】:
目前我想创建单元测试来覆盖我开发的功能中的一些功能,但是当我面对这种功能时遇到问题,当功能的目的是从数据库中检索结果时。
public function saveMessage($request)
{
$validation = $this->validate($request);
if($validation['status']) {
$input = $validation['detail'];
$data = [
'id' => $input['id'],
'note' => $input['message'],
'create_by' => $input['create_by'],
'status' => $input['status'],
'create_date' => DATETIME,
];
$result = $this->fooService->insert($data);
return [
'success' => true
];
}
return $validation;
}
这种功能可以不接触数据库吗?
【问题讨论】:
-
当然,您可以模拟
fooService(可能),但您实际上要测试什么? -
这似乎更适合集成测试。单元测试不应处理在基础架构级别执行操作的代码。
-
就像 El_Vanja 说的。如果您想 tset 是否将值存储在数据库中,最好使用集成测试。如果您真的想要进行单元测试,请像建议的 lagbox 那样模拟数据库
-
好吧,我明白了。谢谢大家:)
标签: php laravel mocking phpunit