我已經寫了一個使用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);
}