我已經完成了一些關於單元測試的閱讀,並希望從第一次測試開始。我正在使用ASP.NET MVC 2.單元測試ASP.NET MVC中的一個菜單2
我們通過獲取職員編號並根據Roles
表格檢查它來確定用戶的類型。如果用戶存在於此表中,則設置UserType
屬性。
我們爲每種類型的用戶提供了一個菜單,並且每種類型的用戶都有不同的菜單項。
如何測試看起來像這樣顯示每種類型用戶的菜單項?
我已經完成了一些關於單元測試的閱讀,並希望從第一次測試開始。我正在使用ASP.NET MVC 2.單元測試ASP.NET MVC中的一個菜單2
我們通過獲取職員編號並根據Roles
表格檢查它來確定用戶的類型。如果用戶存在於此表中,則設置UserType
屬性。
我們爲每種類型的用戶提供了一個菜單,並且每種類型的用戶都有不同的菜單項。
如何測試看起來像這樣顯示每種類型用戶的菜單項?
如果您已經編寫了應用程序,根據某些情況,您現在將使用「遺留代碼」(基於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是確保您進行「適當」單元測試並獲得良好覆蓋率的一種非常好的方法。
祝你好運!
單元測試是一個「微觀」測試單元,因此您必須爲要測試的類中的每個方法編寫單元測試。使用Visual Studio單元測試非常簡單,只需在類上右鍵單擊並更改生成單元測試即可。 他爲您製作測試課程,您只需編寫測試方法的代碼。
每個單元測試只能測試該方法,而不能測試另一個類的另一個方法。因此,如果您正在測試的方法調用另一個方法,則必須使用模擬對象來測試CALL。
一本關於單元測試的優秀且有用的書。 Art of Unit Testing
請不要先寫產品代碼,也不要按照每種方法進行一次單元測試。如果你這樣做,那麼你肯定不會做TDD(測試驅動開發)。 – 2010-11-30 12:14:34
@ Oliver:我認爲單元測試是關於測試每個單元的代碼,並在你的情況下,每種方法? – 2010-11-30 12:23:41