我已经写了一个使用PHP和JS的web应用程序,现在正在工作,并决定我应该学习单元测试,并在清理代码时执行它。像这样的函数有单元测试吗?
我很困惑应该单元测试什么。我见过的每个PHPUnit教程都是测试getters,setters,对数组中的项进行计数。我正在处理的网站上有一个显示照片的页面。用户可以喜欢一张照片或将其添加到他的收藏夹。 PHP主要在站点中作为客户端运行backbone.js的API层使用。
我应该如何为这些函数编写单元测试?一个函数(如下所示)抓取通过AJAX发送给它的$ _GET数据,并在数据库中插入一些行。它不包含任何setter,getters,或计数任何东西,而不是一个类。它应该甚至有单元测试吗?
我可以为这些函数编写一个单元测试的例子将非常棒! :)
/**
* 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
必须包含的数据。我觉得应该有一个测试来检查查询是否工作,但我也认为插入行的函数是由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);
}