2013-07-15 56 views
5

問題

  • 如何使用EntityFramework 5測試我的ASP.NET MVC4 Web應用程序?
  • 我應該使用像Moq這樣的模擬框架嗎?

介紹

我一直在研究這個話題星期。我發現了很多材料,但沒有什麼,我覺得完全可以回答這個問題。很多信息已經過去了幾年,可能不適用。如何爲我的Web應用程序編寫測試?

我的情況

我建立一個MVC4應用程序,是一個重建現有而是過時了應用程序的。數據庫已經存在(並且因此是數據庫優先方法),很大並且很複雜。理想情況下,我想要的是一個假的「實體」對象,它與我的主要實體對象相同,但使用了某種不同的「模擬」或內存數據庫,這樣我可以生成大量假數據,運行測試並接收反饋。例如:

FakeEntities _db = new FakeEntities(); 
// test a controller action 

到目前爲止...

據我瞭解,到目前爲止,我應該使用integration testing。據this post by Ladislav Mrnka整合檢驗檢測手段控制行動,並表示與LINQ到實體和LINQ到對象

如果你嘲笑的庫中,您將使用LINQ到對象,你將有一個綠色的少的問題測試,但如果你運行Linq-To-Entities的應用程序,你會得到一個異常

我知道他的意思,我可以同意 - 我想確保我總是使用Linq-To-Entities和一個真實的(或接近真實的)數據庫。

我讀了很多關於repository patternthis blog by linush看起來非常接近我可能會嘗試。實際上,我已經創建了一個虛擬項目,在該項目中,我測試瞭如何創建generic repository併成功使用了實體框架以及依賴於內存中的ObjectSets的「模擬」DbContext。

我的這種方法的問題是

  1. 如上所述,這意味着我使用LINQ到對象,而不是LINQ到實體
  2. 我的web應用程序將依賴於大量使用的存儲程序

摘要你回答之前

  • MVC4,EF5和SQL Server(雖然我想保持somewh在數據庫無關)
  • 能力測試使用SQL存儲過程
  • LINQ到實體邏輯
  • 數據庫,第一種方法
+4

只有50代表這麼多的問題!!!!!!嘗試增加0的 –

+0

[Compuware AJAX版免費網站性能分析 和調試工具](http://www.compuware.com/en_us/application-performance-management/products/ajax-free-edition/Capabilities.html) –

回答

1

你的問題本身充滿了矛盾。例如,你說測試存儲過程很重要,但你也想成爲數據庫不可知的。哪一個?

如果您真的想成爲數據庫不可知論者,請擺脫您的存儲過程並使測試環境變得更簡單。您將能夠使用完全內存數據庫(如Apache Derby)作爲測試環境的一部分。這使得Jenkins內部的腳本或任何CI環境變得更加簡單。

接下來你需要決定你想測試什麼。如果你在你的控制器周圍進行單元測試,那麼確保你編寫你的控制器是可測試的。既然你從頭開始,這應該很容易做到。使用注入等概念可以輕鬆地將部分功能交換爲模擬實現。使用模擬對象框架(如您所發現的)來創建一組對象,並將其傳遞給正在測試的控制器。

如果您可以自行測試您的控制器,以上所有內容都很好。但是如果你正在構建一個高度相互依存的棧,並且數據庫存儲過程與控制器和視圖進行深入交互,那麼這將不會很好。要麼重新設計你的方法,以便單元測試是可能的,或者轉向功能測試。

Selenium是Web應用程序中最知名和最常用的功能測試環境之一。您可以從頭到尾測試整個系統。更好的是,您可以開始在現有的舊應用程序周圍編寫Selenium測試,然後確保新的實現在重寫期間重現相同的功能。

相關問題