當使用.Net核心框架編譯時,最新的xunit框架不允許庫代碼中的測試運行程序(這適用於普通的Visual Studio代碼)。解決方案是創建一個單獨的測試項目來運行測試用例。.Net核心庫:如何使用xUnit測試私有方法
我遇到的問題是我想測試的一些方法是'私有'方法。 如何從我的測試項目中調用這些方法而不將它們的範圍設爲「公開」?
更一般的問題是:當使用私有方法的公共方法無法使用時,如何測試私有方法?(因爲它的互動性的 - 也就是說,它具有的ReadLine();其中包含的)
可能的解決方案:
1)使私有方法公共和方式,以將其重命名錶明它們不應該在外部使用。 (使用'private'或'internal'作爲名稱的一部分)
2)創建一個'public static bool Testflag'字段,該字段可以設置爲true以避開公共方法的交互部分以確保測試所有其部分。
(雖然我已經使用上述兩種方法 - ?我真的不喜歡它,因爲私有方法應該保密和標誌添加額外的複雜性,很多已經有人遇到了同樣的問題,你是怎麼解決它
這個問題的一般答案是將交互部分視爲服務並將其隱藏在接口後面(您可能稱爲「IInputRequester」或類似接口)。然後,您的單元測試可以通過該接口的模擬實現('MockInputRequester'),而您的生產代碼可以傳遞該接口的實際實現('ConsoleInputRequester')。請注意,這不僅僅是你爲單元測試做的事情。這是製作[SOLID](https://en.wikipedia.org/wiki/SOLID_(object-oriented_design))設計的標準部分。 –
看起來公共方法與執行問題緊密相關,這使得測試變得困難。這表明設計需要重構。 (代碼味道) – Nkosi