Модульное тестирование куки в PHP - PullRequest
4 голосов
/ 21 декабря 2010

Практикой по умолчанию для функциональности модульного тестирования, которая опирается на информацию о сеансе / cookie, является использование библиотеки абстракций.Но что если я захочу написать и протестировать эту библиотеку абстракций?В документации по функции PHP setcookie говорится, что файл cookie будет доступен при следующем запросе.При использовании инструмента командной строки для тестирования не существует такого понятия, как «запрос».Так как же мне протестировать правильные настройки файлов cookie?

Я хочу проверить, правильно ли все параметры функции setcookie установлены моей библиотекой абстракций.Эти параметры будут установлены в соответствии с определенными условиями и вызовами методов.

Единственное решение, которое я могу придумать, это смоделировать функцию setcookie с расширением runkit, которое я не хочу устанавливать.Другие идеи?

Ответы [ 2 ]

11 голосов
/ 21 декабря 2010

Я нашел другое, очень простое решение: обертка класса вокруг функции PHP setcookie, которая настолько проста, что не нуждается в модульном тестировании:

/**
 * Wrapper around setcookie function for better testability
 */ 
class Cookiesetter {
  public function setcookie($name, $value = "",  $expire = 0,  $path = "", 
    $domain = "", $secure = false, $httponly = false) {
    return setcookie($name, $value,  $expire, $path, $domain, $secure, $httponly);
  }
}

Метод setcookie может быть смоделирован. Это дает дополнительное преимущество, заключающееся в том, что я могу реализовать другие методы, такие как expireCookie.

3 голосов
/ 21 декабря 2010

Вы можете установить значение непосредственно в текущий массив $ _COOKIE:

<?php
$_COOKIE['test']='hello';
print_r($_COOKIE);
run_tests();

(это работает и в режиме CLI).Обратите внимание, что $ _REQUEST не будет обновляться при этом.

Однако, если вы только пытаетесь манипулировать файлами cookie, чтобы впоследствии иметь доступ к сеансу, почему бы просто не получить доступ к сеансу напрямую:1008 * Но мы говорим здесь о модульном тестировании, а не об интеграционном тестировании, которое предполагает, что код не очень хорошо структурирован.

...