2010-09-08 60 views
0

我有一個安全規則,即新註冊的用戶擁有對自己的用戶實體的完全權限。我正在使用Rhino.Security並且代碼工作正常,但我想創建一個單元測試以確保正確調用設置權限。下面是代碼的簡化verison:如何測試是否調用流暢的服務方法

public User Register(UserRegisterTask userRegistrationTask) { 
    User user = User.Create(userRegistrationTask); 
    this.userRepository.Save(user); 

    // Give this user permission to do operations on itself 
    this.permissionsBuilderService.Allow("Domain/User") 
     .For(user) 
     .On(user) 
     .DefaultLevel() 
     .Save(); 

    return user; 
} 

我嘲笑userRepository和permissionBuilderService但permissionBuilderService的連貫接口需要從每個方法調用鏈中的(即.Allow返回不同的對象( ...)。(...)。(...)等)。但我無法找到一種方法來模擬鏈中的每個對象。

有沒有辦法測試permissionBuilderService的Allow方法是否被調用,但忽略了其餘的鏈?

感謝 丹

+0

真正的permissionsBuilderService是否有任何副作用? (即在測試中是否可以使用真實的數據庫?) – Grzenio 2010-09-08 16:26:10

+0

真正的permissionsBuilderService期望有附加的真實數據庫。這是可能的,但需要設置數據庫並將其分解爲每種類型的測試。我希望對事物要求不高。 – Dan 2010-09-08 16:31:24

回答

0

我也碰到了這一點,並結束了包裹在一個服務層中的犀牛安全功能的原因有兩個:

  1. 這是使單元測試真正的皮塔餅和花​​費後幾個小時將我的頭靠在一堵磚牆上,這種方法讓我更容易地嘲笑這一層。
  2. 我開始覺得犀牛安全與我的控制器緊密耦合(我的應用程序使用MVC)。將呼叫包裹在另一層允許我鬆散地耦合到特定的安全實現,並且使我可以在未來輕鬆地將其與另一個 - 如果我願意的話 - 交換出來。

顯然,這只是一種方法。但它使我的生活變得更加簡單...

相關問題