2 回答

TA貢獻1852條經驗 獲得超7個贊
在這種情況下,您正在讓您的User
班級負責加載角色。通常,這不是您User
班級的責任。相反,您可以例如setRole(Role $role)
在您的User
類上定義一個函數,該函數接受一個 realRole
或 fake/stub/mock/whatever Role
,而不是用戶 ID。然后在實際使用用戶對象的函數/代碼中完成角色的檢索。
但是那么如何測試那個類呢?
在單元測試中,通常更容易不依賴像你的靜態方法Role::load
。相反,您可以使用非靜態方法。然后,您可以編寫一個擴展類,Role
它會在測試期間執行您希望它執行的操作。然后你也可以寫一些東西來檢查你告訴它做的事情是否已經完成。
這就是為什么通常不鼓勵使用許多靜態方法的原因:因為很難測試(使用)它們。

TA貢獻1936條經驗 獲得超7個贊
您的User課程除了加載角色之外什么都不做。所以問題是你會在這門課上團結什么?
單元測試的目的是檢查一種方法是否正常工作。這意味著如果對于已定義的輸入,它會返回預期結果,或者如果輸入無效則拋出錯誤。
Role如果您進行單元測試,存根或模擬類是完全可以的。想象一下你在User類中有下一個方法(偽代碼我在 PHP 中不太好)
public function getUserRights() : String[]
{
String[] array = new String[5];
if ($this->role.equals('ADMIN'){
.... some logic here ...
}
return array;
}
如果現在你存根你的角色并且在不同的測試中你從存根(模擬)對象返回不同的角色,你可以檢查你的方法 getUserRights()是否基于不同的角色正常工作。
而且也可以從 web 服務加載角色,但在這種情況下,我會稱之為集成測試,在這種情況下,你想檢查你的 web 服務是否正常工作,并且設置這些類型的測試并不像它那樣容易單元測試。
- 2 回答
- 0 關注
- 138 瀏覽
添加回答
舉報