Должны ли такие функции иметь модульные тесты?

Я написал веб-приложение с использованием PHP и JS, которое сейчас работает, и решил, что мне следует узнать о модульном тестировании и внедрить его сейчас, очищая свой код.

Я смущен тем, что должно быть модульно протестировано. Каждый учебник PHPUnit, который я видел, тестирует геттеры, сеттеры, подсчитывает элементы в массивах. На сайте, над которым я работаю, есть страница, на которой отображаются фотографии. Пользователь может лайкнуть фотографию или добавить ее в избранное. PHP в основном используется на сайте в качестве уровня API для клиентской части, на которой работает backbone.js.

Как мне написать модульные тесты для этих функций? Функция (, показанная ниже ), получает $_GET-данные, отправленные ей через AJAX, и вставляет несколько строк в базу данных. Он не содержит сеттеров, геттеров, ничего не считает и не является классом. Должен ли он вообще иметь модульный тест?

Пример модульного теста, который я могу написать для этих функций, будет действительно потрясающим!:)

/**
 * 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должны содержать данные. Я чувствую, что должен быть тест, чтобы проверить, работают ли 2 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);

}
6
задан fguillen 10 August 2012 в 10:18
поделиться