對一個需要讀取web.config擷取資料庫連接配接字元串的項目建立單元測試,測試抛出異常:system.nullreferenceexception: 未将對象引用設定到對象的執行個體,一步步debug發現在測試項目中無法讀取被測項目的web.config檔案。後來把web.config整個複制到測試項目中,卻也發現不行。無奈之下,把複制到測試項目的web.config改成app.config,卻發現可以從app.config中正确讀出配置資訊了。
1、如果是web應用程式,因為配置檔案名必須為web.config,是以如果目前目錄下有web.config檔案,就讀取目前目錄下的配置檔案,如果目前目錄沒有則讀取根目錄下的配置檔案。
2、如果是winform/wpf/控制台應用程式,則配置檔案就是【程式名.exe.config】
這些都是.net配置系統約定好的規則,更詳細的資訊樓主可以使用reflector檢視system.web.configuration.webconfigurationmanager和system.configuration.configurationmanager兩個類的源代碼
3、如果是vs生成的單元測試項目,配置檔案名必須是app.config。是以如果是在web應用程式中運作單元測試,需要把web.config對應地修改成app.config。這樣單元測試項目才能正确地從配置檔案中讀出相應的配置。因為單元測試是由測試項目運作的,當運作測試項目時,隻是引用了我們的被測項目,是以是尋找測試項目的app.config檔案
1.在測試項目中添加app.config檔案,将被測項目的app.config檔案中的内容複制到測試項目的app.config檔案中(不推薦,需要維護兩份app.config檔案)。如果是web應用程式,還需要将web.config重命名為app.config,才能正确被測試項目讀取。
2.在解決方案管理器中,右擊測試項目→添加→現有項,選擇被測項目的app.config檔案,并選擇“添加為連結”(如果直接添加則和方法1無差別,等同于複制檔案,需要維護兩個app.config檔案,無法随被測項目中的原檔案進行更新)
3、修改測試項目的生成事件,以便能夠自動将web.config (或app.config)複制到測試項目的bin(輸出)目錄下。隻需要簡單幾步即可
①右鍵點“測試項目”,選擇屬性②點選“生成事件”→在“後期生成事件指令行”的文本框中輸入 <code>copy "$(solutiondir)\webapplication1\web.config" "$(projectdir)$(outdir)$(targetfilename).config" </code> <code>其中webapplication1要替換成你被測試項目的名稱。</code>![]()
将配置檔案自動複制到vs的測試項目中 ③按下“ctrl+s”儲存,這樣每次運作測試項目的時候,他就會從被測試項目中複制一份配置檔案![]()
将配置檔案自動複制到vs的測試項目中
參考網址:
<a href="http://stackoverflow.com/questions/344069/can-a-unit-test-project-load-the-target-applications-app-config-file">can a unit test project load the target application's app.config file?</a>
<a href="http://q.cnblogs.com/q/31173/">用vs2008單元測試需要讀取app.config的項目</a>
本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。
轉載:http://www.cnblogs.com/kissazi2/archive/2013/03/15/2960661.html