2012-05-18 125 views
0

我正在使用自定義asp.net成員資格提供程序,並使用nhibernate數據訪問代碼,這很好。現在我需要使用測試來鍛鍊這些方法。測試自定義ASP.NET成員資格提供程序

有興趣提出這些方法應該如何測試的人?提供一些鏈接來解釋使用一些標準的測試方法可能?

這是我的第一個問題,所以要溫柔:)

+0

你試過這個嗎? http://geekswithblogs.net/AzamSharp/archive/2007/12/30/118071.aspx – Grunf

回答

1

當涉及到單元測試,做與數據庫或第三方庫的東西,你應該去耦這些依賴關係,使任何代碼的測試,只有測試你的代碼。例如,如果我們的成員資格提供程序中有一個用於添加單個用戶的方法,那麼我們要測試的是我們的單一方法的代碼正常工作,而不是數據庫已啓動並正在運行,或者該方法由此方法調用工作。即使數據庫處於脫機狀態,或者其他類的方法調用失敗,我們的單元測試仍應該通過。

這是Mocking進場的地方。你會想要嘲笑你的數據上下文,並設置你將要使用的任何方法,這樣你就可以控制它的響應。

仔細查看您的會員提供商的方法。每個人應該做什麼?這是你真正想測試的唯一的東西。這種方法作爲一個獨立的單位來完成我期待的工作嗎?

+0

我想在沒有模仿的情況下在成員資格提供者中測試我的方法,例如,使用CreateUser方法將新用戶添加到數據庫表中,回滾事務在測試之前離開db。我應該遵循這種方法嗎?嘲笑奇怪的我:) – panjo

+0

我個人認爲嘲笑是一種更有效的方法。如果你在你的數據庫中插入和回滾數據,那麼你不僅僅是測試你的代碼單元,你正在測試網絡,網絡連接,數據庫引擎等等。當我編寫單元測試時,我想要自信我的代碼能夠像我期望的那樣工作,並且如果網絡出現故障,我不希望我的測試失敗。 –

+0

好吧,嘲笑它:)任何鏈接與嘲笑會員供應商的具體例子 – panjo

0

會員提供商很難模擬和測試,所以我個人不打擾。然而,我所做的是將所有我的會員代碼放在的類別中,方便測試。

我大部分的自定義提供的是這個樣子:

public class CustomMembershipProvider : MembershipProvider 
    { 
     private readonly IUserService _userService; 

     public ButlinsMembershipProvider() 
     { 
      _userService = DI.Resolve<IUserService>(); 
     } 

     public override bool ValidateUser(string username, string password) 
     { 
      return _userService.Authenticate(username, password); 
     } 
} 

在這個例子中,我會寫集成測試,以驗證用戶服務的行爲。我不測試提供者。

相關問題