2010-11-30 63 views
1

我已經完成了一些關於單元測試的閱讀,並希望從第一次測試開始。我正在使用ASP.NET MVC 2.單元測試ASP.NET MVC中的一個菜單2

我們通過獲取職員編號並根據Roles表格檢查它來確定用戶的類型。如果用戶存在於此表中,則設置UserType屬性。

我們爲每種類型的用戶提供了一個菜單,並且每種類型的用戶都有不同的菜單項。

如何測試看起來像這樣顯示每種類型用戶的菜單項?

回答

1

如果您已經編寫了應用程序,根據某些情況,您現在將使用「遺留代碼」(基於Michael Feather的書「使用遺留代碼有效地工作 - 通過」遺留代碼「Feathers意味着任何系統沒有被單元測試充分覆蓋)。

由於@bAN提到,你將不得不做了很多工作,通過使用工廠方法,您可以用「存根」使用接口或使用override代替了你將要調用的方法分離。沒有這個,你會做集成測試(因爲你也將測試不同原子功能之間的集成)。但是,測試方法與生產方法的1:1比例在幾乎所有情況下都不能提供足夠的覆蓋率。

根據您的Visual Studio版本,測試工具的數量會有所不同。如果您不使用Visual Studio工具,NUnit是一個非常流行的測試框架:http://www.nunit.org/

爲了得到測試,您可以:

創建型測試項目的新項目稱爲YourProjectUnderTestName.Tests.Unit。

您將看到測試類具有屬性[TestClass],測試方法的屬性爲[TestMethod]

你還必須看Assert類和它們的靜態方法http://msdn.microsoft.com/en-us/library/ms182530.aspx

您應該按照您的測試安排,法,斷言模式。獲取所需的全部內容,以運行要獨立測試的代碼,然後運行測試中的代碼,然後使用Asserts對預期行爲進行測試。

你會在某些時候還需要了解[設置]/[TearDown中]的方法(在MSUnit)這些具有的屬性:
[ClassInitialize()][TestInitialize()]
[TestCleanup()][ClassCleanup()]

ClassInitialize在開始任何測試之前運行,TestInitialize在每個班級的測試之前運行,TestCleanup在班級中的每個測試之後運行並且ClassCleanup在所有測試完成之後運行。

由於@bAN說有看看http://artofunittesting.com/網站,並認真考慮拿到這本書。這是我在辦公室着火的時候可以拿到的一個,以及Code Complete。

作爲@bAN和@Oliver Hanappi提到TDD是確保您進行「適當」單元測試並獲得良好覆蓋率的一種非常好的方法。

祝你好運!

1

單元測試是一個「微觀」測試單元,因此您必須爲要測試的類中的每個方法編寫單元測試。使用Visual Studio單元測試非常簡單,只需在類上右鍵單擊並更改生成單元測試即可。 他爲您製作測試課程,您只需編寫測試方法的代碼。

每個單元測試只能測試該方法,而不能測試另一個類的另一個方法。因此,如果您正在測試的方法調用另一個方法,則必須使用模擬對象來測試CALL。

一本關於單元測試的優秀且有用的書。 Art of Unit Testing

+0

請不要先寫產品代碼,也不要按照每種方法進行一次單元測試。如果你這樣做,那麼你肯定不會做TDD(測試驅動開發)。 – 2010-11-30 12:14:34

+0

@ Oliver:我認爲單元測試是關於測試每個單元的代碼,並在你的情況下,每種方法? – 2010-11-30 12:23:41