[英]Unit testing cookies in PHP
依賴於會話/ cookie信息的單元測試功能的默認做法是使用抽象庫。 但是如果我想編寫和單元測試這個抽象庫呢? PHP setcookie
函數的文檔說明cookie將在下一個請求中提供。 使用命令行工具進行測試,沒有“請求”這樣的東西。 那么如何才能對正確的cookie設置進行單元測試呢?
我想測試我的抽象庫是否正確設置了setcookie
函數的所有參數。 這些參數將根據某些條件和方法調用進行設置。
我能想到的唯一解決方案是使用runkit
擴展模擬setcookie
函數,我不想安裝它。 其他想法?
我發現了另一個非常簡單的解決方案:圍繞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
。
您可以直接將值設置到當前的$ _COOKIE數組中:
<?php
$_COOKIE['test']='hello';
print_r($_COOKIE);
run_tests();
(這也適用於CLI模式)。 請注意,$ _REQUEST不會由此更新。
但是,如果您只是嘗試操作cookie以便隨后可以訪問會話,那么為什么不直接訪問會話:
<?php
$_SESSION['auth_user']='root';
run_tests();
但我們在這里討論的是單元測試 - 而不是集成測試 - 這表明代碼結構不是很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.