你在哪裏把私人函數的單元測試放在C#類中?你在哪裏把私人方法的單元測試?
- 把測試在同一個班,他們正在測試
- 使用部分類
個人成員,這些方法都似乎是適當的,和我更願意將單元測試放在一個單獨的項目中。
對此有何看法?
(我知道有關於是否私有方法應該在所有被測試的辯論相當數量的。我想聽到爭論的雙方。)
你在哪裏把私人函數的單元測試放在C#類中?你在哪裏把私人方法的單元測試?
個人成員,這些方法都似乎是適當的,和我更願意將單元測試放在一個單獨的項目中。
對此有何看法?
(我知道有關於是否私有方法應該在所有被測試的辯論相當數量的。我想聽到爭論的雙方。)
私有方法不一定需要直接測試。您可以根據利用這些私人方法的公共方法的測試來確定其有效性。
然而,你應該小心,以確保您的公共方法可以輕鬆地將模擬依賴到你的私有方法,以方便測試和模擬所有合理的方案。
編輯:至於你的其他測試應該在哪裏,我建議在你的項目中的一個單獨的子目錄來處理你的測試。在爲PHP應用程序編寫測試時,我的項目根目錄中有測試目錄,其目錄結構與我的真實應用程序目錄結構相同。其中,我爲每個真實課堂都有一門測試課。
只是不釋放到生產時你的項目的其餘部分編譯你的測試類(或類似PHP的語言interpretted的情況下,不部署測試類生產Web服務器)。
您的問題標題和第一句是不同的。 :)
我不確定放置測試的位置。這將取決於語言和C#不是我熟悉的,但我想你的代碼的很大一部分是私有方法。如果沒有測試,我會感到不舒服。代碼覆蓋率會下降很多。
對此感到抱歉,我編輯了標題。 – Jonathan 2010-01-10 03:43:51
絕對是的。無論如何都應該測試私有方法。和mbunit單元測試框架可以訪問私有成員。
看到這個博客: testing private methods
不要單元測試私有方法。單元測試用於測試類的可見(如此公共和受保護的)接口。私有方法是實現細節,爲它們編寫單元測試是不必要的(它們的行爲應該通過對可見方法的測試隱式測試),導致脆弱的測試(因爲實現細節可能會改變),並且是重構的障礙。
如果你有,你覺得你需要進行單元測試的私有方法,這是一個很大的提示,也許它應該被分解成另一個類的公共方法。
你在哪裏把私人函數在C#類的單元測試?
無處。他們不存在。
一般來說,我的單元測試是在單獨的項目中。
這指出了測試的目的:測試說「你的對象工作正常」,它是:「你的對象的公共接口工作正常」。如果事實上你的私有方法的原因是公共方法,那麼它們必須只存在於爲公共方法實現某些東西。所以如果你測試公共方法,你正在測試私有方法。測試驅動開發說:如果你想做一些事情寫下測試,然後執行它。這樣你只需要編程公衆就可以了。私人方法將遵循相同的政策。 – helios 2010-01-09 18:01:05
是隻有一個構造函數和私有方法沒有用於單元測試的類? – 2010-03-25 14:08:29
感覺「我需要測試這個私有方法」可能表明代碼需要重構,私有方法中的功能應該移到其他類中,並以公共方法公開。 – 2013-06-18 08:21:50
我們在Visual Studio中使用私有訪問器來測試私有方法。這意味着測試類可以存在於一個單獨的項目中。
然而,我們儘量要真正限制這些,因爲數字:
我也個人喜歡在單獨的項目中進行單元測試。 如果你想單元測試一個私有方法,你可以改爲私有方法。然後,您可以看到內部方法,你的單元測試通過直接添加以下到AssemblyInfo.cs中呼籲:
[assembly: InternalsVisibleTo("MyAssembly.UnitTests")]
+1,但我認爲最好只測試公共I/F。 – kenny 2010-01-09 18:40:59
我同意私有方法不應該被測試,一般來說,因爲你應該只測試公共接口。
話雖這麼說,是有原因的,你可能想測試私有方法:
您正在使用TDD,你必須制定一個複雜的私有方法。爲私有方法創建測試方法可能是必要的,以保持您的寫測試代碼 - 測試周期的正確粒度。
您可能是團隊的一員,其他人可能需要修改私有方法,並且希望測試確保更改不會產生問題。
一些解決方案:
聲明一些方法,這些方法公衆代表對私有方法和只用於測試目的。這些可以作爲例如前綴。與TestFoo1,TestFoo2等
使用內部
http://msdn.microsoft.com/en-us/library/7c5ka91b(VS.80).aspx
你應該爲你做什麼工作;這裏是什麼適合我:
我的單位是一類:這就是我想要測試。不是一種方法。我試圖做面向對象編程,所以我把注意力放在對象上。
如果我發現自己試圖測試一個私有方法,我需要重構。我只想直接測試一個私有方法,因爲它和測試之間的代碼太多了,而且私有方法本身足夠複雜,需要測試注意。所以,我通常會通過提取類來將該私有方法和其他相關成員拉入新類。
我的班級傾向於相當小。他們很容易閱讀和理解。當然,我的方法也很小,很容易理解。
轉換到這種工作方式需要我重新思考許多關於編程的假設和習慣。曾經看起來很激進的現在看來很平常。
+1,如果您想要測試私有方法,您(可能)需要重構。 – 2010-01-09 18:24:32
我認爲把測試代碼放在生產代碼中是一個壞主意。 – Benny 2010-01-09 18:25:38
您使用哪種測試框架(如果有)? – 2010-01-09 21:38:28