2011-12-13 104 views
0

我在爲一個應用程序編寫一些單元測試的同時,在我的類中構建直觀的方法,根據調用方法的「類」進行不同的渲染。單元測試的委託方法

所以,我在NUnit的類,並且需要測試是否FormsAuthenticationTicket用於身份驗證的用戶已成功創建:我現在面臨

Assert.DoesNotThrow(typeof(Application.AuthenticationFailure), 
    delegate { Code.Authenticate(); } 

問題是HttpContext的是不是在單元測試中有效。找到了幾個解決方案,但是像Phil Haack用他的HttpSimulator做的那樣。這不直接在我的單元測試代碼中工作,因爲我嘲笑EF類(不推薦我知道),並且模擬器影響連接字符串。

這是一個更好的選擇,而移動數據呼叫出了單元測試,但我學習的過程中匿名方法,並希望做這樣的事情:

delegate<Test> { AuthenticateSimulate(customer); } 

是否有在3.5中做出這樣的不錯的選擇?

+0

是否使用MVC與ASP.NET 3.5,這是一個Web窗體應用程序? –

+0

我正在使用3.5與正常的Web窗體。我沒有100%的MVC出售,並希望通過非常規的方式構建「傳統」的東西。感覺我真的會學到東西:) – JadedEric

+0

我不知道我明白你想要完成什麼。 Code.Authenticate(),,AuthenticateSimulate和customer未定義。我建議簡化你的問題。您是否在提交http表單作爲測試的一部分?你真的只是試圖在你的數據訪問層中測試一個驗證用戶名和密碼的方法嗎?如果您希望某個方法的行爲取決於某個條件,請在該方法中添加一個參數。我不確定你爲什麼要以非常規的方式開始構建一些東西。首先學習標準花費的時間會更多。 –

回答

1

也許嘗試一個模擬對象框架,例如RhinoMocks,Moq或TypeMock Isolator,或者像Microsoft Moles這樣的隔離框架。

http://research.microsoft.com/en-us/projects/moles/
「用你自己的委託代替任何.NET方法!」
「Moles是一個輕量級的框架,用於.NET中基於委託的測試存根和繞行。Moles可用於繞開任何.NET方法,包括密封類型中的非虛擬/靜態方法。」

編輯
另見:
http://stephenwalther.com/blog/archive/2008/07/01/asp-net-mvc-tip-12-faking-the-controller-context.aspx

在MVC中,例如:
http://mvccontrib.codeplex.com/wikipage?title=TestHelper&referringTitle=Documentation

+0

有趣。感謝拉米a。似乎是我在找的東西。 – JadedEric