2014-01-16 59 views
4

我試圖用Visual Studio 2013的內置工具單元測試.NET Web項目。我已經用NuGet添加了Moq,但是如果不用虛擬方法和/或接口重寫整個項目,就無法測試控制器。所以我正在尋找一種方法來測試代碼,而不必在現有的源代碼中進行混淆。是否存在不需要虛擬方法的.NET/C#嘲諷框架

預先感謝任何幫助

+0

嗨!如果你不能重寫代碼,也許你不能做適當的單元測試 - 但我可能是錯的。 **也許** *自動勘探測試*可能在這種情況下有用。您可以使用Selenium和Firefox/IE/Chrome驅動程序。如果您選擇這樣做,您可以在代碼中定義一些UI測試場景並運行它們。順便說一句,你爲什麼要測試網絡控制器?只是問...你可以測試它們依賴的模塊。通常情況下,網絡控制器是假的和懶惰的,他們將傳入的請求委託給其他更加努力工作的模塊:) –

+0

我不得不模仿控制器,因爲它的構造函數依賴於我不想以任何方式改變的存儲庫(所以我嘲笑) - 我想我可以回過頭來重構所有的存儲庫來擴展接口,但我希望避免這種情況。我不想破壞任何東西 – eggshell

+0

然後...只需傳遞控制器[動態對象](http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject.aspx):)或者一個* ExpandoObject *。可能你可以用這種方式欺騙他(它)。 DynamicObject將作爲一個假存儲庫。你怎麼看待這件事?哎呀,只有現在我明白了:(它不會工作,對不起... –

回答

1

由於您使用VS2013你可以利用微軟正版正貨和墊片。更多詳細信息,並使用在http://msdn.microsoft.com/en-us/library/hh549175.aspx

+0

我想這隻適用於最終版本 – AlwaysAProgrammer

+0

根據http://www.visualstudio.com/products/compare- visual-studio-products-vs可用於Ultimate和Premium(無論是哪個版本)版本 – tucaz

+0

我認爲Shims in Fakes框架是您的選擇(顯然,如果您擁有合適的許可證),但不適合使用Shims for你擁有的代碼。我建議你最終改變你的代碼來使用接口/虛擬方法。 –

1

也許退房FakeItEasy:http://fakeiteasy.github.io/

+0

感謝您的想法;不幸的是,FakeItEasy還需要所有東西都是虛擬的或從接口擴展。 – eggshell

+0

@eggshell確定,對不起,我還沒有真正使用它,但有一天它正在閱讀。 – TypeIA