我已经使用 PHP 和 JS 编写了一个 webapp,它现在可以工作,并决定我应该学习单元测试并在清理我的代码时立即实施它。
我对应该对什么进行单元测试感到困惑。我见过的每个 PHPUnit 教程都测试了 getter、setter、对数组中的项目进行计数。我正在处理的网站上有一个显示照片的页面。用户可以喜欢照片或将其添加到他的收藏夹。PHP 主要在站点中用作客户端运行主干.js 的 API 层。
我应该如何为这些功能编写单元测试?一个函数(如下所示)获取通过 AJAX 发送给它的 $_GET 数据,并将一些行插入到数据库中。它不包含任何 setter、getter 或计数任何东西,也不是一个类。它甚至应该进行单元测试吗?
我可以为这些功能编写的单元测试示例将非常棒!:)
/**
* Create new Set and add item to it
* @return void
*/
public function action_create_set() {
// Get data from user
$user_id = Input::get('user_id');
$post_id = Input::get('post_id');
$set_name = Input::get('set_name');
// Create new set
$data = array(
'user_id' => $user_id,
'name' => $set_name
);
$set_id = DB::table('sets')->insert_get_id($data);
// Add item to newly created set
DB::query("INSERT IGNORE INTO posts_sets (post_id, set_id, user_id)
VALUES ($post_id, $set_id, $user_id)");
// Change `created_at` & `updated_at` col of 'sets'
$data = array(
'created_at' => DB::raw('NOW()'),
'updated_at' => DB::raw('NOW()')
);
DB::table('sets')
->where('id', '=', $set_id)
->update($data);
}
对于第一个函数,我的印象是可以编写一个测试来检查这 3 个变量$user_id, $post_id, $set_name
是否必须包含数据。我觉得应该有一个测试来检查这两个insert
查询是否有效,但我也认为插入行的函数是由 PHP 框架提供的,并且已经过彻底测试,因此不需要进一步的单元测试。
另一个猜测是测试应该向函数提供 3 个变量,然后检查新行是否已插入到 2 个表中,但这不会被视为集成测试吗?
这是一个函数,它通过 AJAX 从用户那里获取输入,然后以 JSON 格式返回结果。PHPUnit 应该处理这种 API 函数吗?还是应该在客户端进行单元测试?
/**
* Get items Liked by user
* @return array
*/
public function action_likes() {
$user_id = Input::get('user_id');
$likes = DB::table('likes')
->join('posts', 'posts.id', '=', 'likes.post_id')
->where('likes.user_id', '=', $user_id)
->get();
return json_encode($likes);
}