簡體   English   中英

用PHP測試cookie的單元

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM