簡體   English   中英

ConfigurationManager.GetSection(sectionName)在執行單元測試時返回null

[英]ConfigurationManager.GetSection(sectionName) returns null while performing unit tests

我有一個單元測試項目,它有自己的app.config文件,它是由正在測試的目標項目定義的真實配置文件的模擬。 這個模擬文件由單元測試代碼(而不是目標項目)加載和處理,如果我只在這個測試項目中運行測試,它就能正常工作。

ConfigurationManager.GetSection(sectionName)

但是,如果我從多個測試項目運行測試,並且在相關項目之前執行其他測試項目,則上述語句將返回null 如果首先執行討論的測試項目,則加載配置文件沒有問題。

如何在單元測試中修復配置文件的加載才能正常工作?

你的問題不是ConfigurationManager.GetSection(sectionName)返回null,它是如何測試包含ConfigurationManager.GetSection(sectionName)的一些代碼的?

答案是:包裝它,注入它,然后為你的測試模擬它。

您有幾個面臨相同問題的人員示例:

(第二個更詳細,但想法仍然相同)。

無論如何,這是合乎邏輯的,你不能在單元測試中使用來自app.config的信息,因為app.config是整個應用程序的上下文,當需要編寫絕對獨立的測試時。 如果直接使用app.config值,則表示您具有非邏輯耦合。

面對同樣的問題,這解決了它:如果將Copy to Output Directory屬性設置為Copy if newer [DeploymentItem("your.config")] Copy if newer或者添加DeploymentItem屬性[DeploymentItem("your.config")]則應該在單元測試中拾取app.config

更詳細的描述: http//social.msdn.microsoft.com/Forums/en-US/3e520735-8ced-4092-b681-38b69e0db534/unit-test-configuration#32998bf4-5a76-4083-99da-42f0c3a91559

類似的問題: MSTest和app.config問題

我認為問題是它無法在測試工作目錄中找到該文件或文件本身無法加載。

我通過顯式加載配置文件名稱解決了這個問題。 在你的情況下,你可以嘗試相同的。

ExeConfigurationFileMap configMap = new ExeConfigurationFileMap();
configMap.ExeConfigFilename = @"d:\test\test.config";
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);

我使用了測試項目post build命令行,但是如果有更改,請記得構建項目:

copy /Y "$(SolutionDir)$(SolutionName)\App.Debug.config" "$(TargetDir)$(ProjectName)$(TargetExt).config"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM