在UnitTest中读取*.config文件的郁闷
生活随笔
收集整理的這篇文章主要介紹了
在UnitTest中读取*.config文件的郁闷
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
- -Visual Stuido 2005集成了Unit Test功能后,創(chuàng)建和管理Unit Test變得比原來(lái)簡(jiǎn)單多了,并且獨(dú)立項(xiàng)目的Unit Test模塊和代碼不會(huì)再"殘留"于我們的dll中。不過(guò)VS 2005 Unit Test運(yùn)行方法的原理和其他的Unit Test框架一樣,也是使用反射來(lái)實(shí)現(xiàn)的,這樣就會(huì)造成代碼中一些依賴(lài)于運(yùn)行環(huán)境的參數(shù)獲取不到。
??? 剛才做了一個(gè)方法的Unit Test,該方法依賴(lài)于Web.confing里面的一個(gè)定制參數(shù),于是郁悶就來(lái)了。當(dāng)我運(yùn)行測(cè)試代碼時(shí),發(fā)現(xiàn)那個(gè)Config里面配置參數(shù)總是為null。本來(lái)這個(gè)問(wèn)題應(yīng)該一點(diǎn)都不復(fù)雜,可是當(dāng)我查看程序編譯時(shí)的輸出信息時(shí),發(fā)現(xiàn)如下的一個(gè)Warning: 'System.Configuration.ConfigurationSettings.AppSettings'?is?obsolete:?'This?method?is?obsolete,?it?has?been?replaced?by?System.Configuration!System.Configuration.ConfigurationManager.AppSettings'
??? 本來(lái)還有點(diǎn)清醒的我被這個(gè)Warning搞糊涂了,還以為是舊的方法出了什么問(wèn)題被廢棄,結(jié)果把本來(lái)簡(jiǎn)單的問(wèn)題想的越來(lái)越復(fù)雜:(。于是按編譯提示把ConfigurationSettings改成了ConfigurationManager,顯然這是徒勞的,問(wèn)題依舊,還是無(wú)法取到Config文件里的參數(shù)值。
??? 在ConfigurationSettings和ConfigurationManager間又倒騰了半天,仍然是毫無(wú)起色。在郁悶了很久之后,突然醍醐灌頂想到,config文件是一個(gè)應(yīng)用的全局配置,應(yīng)該在應(yīng)用本身正常啟動(dòng)后才能被載入生效。由于Unit Test使用反射的方式載入assembly和class,再I(mǎi)nvoke被測(cè)試的方法,這樣一來(lái)本身的應(yīng)用沒(méi)有被正常的啟動(dòng),config信息當(dāng)然也就無(wú)從獲取。于是馬上啟動(dòng)應(yīng)用本身,果然就取到了config文件中配置的參數(shù)。
??? 所以在做Unit Test的時(shí)候,需要注意被測(cè)試的方法是否依賴(lài)了config文件中的參數(shù),如果有需要暫時(shí)使用hardcode的常量來(lái)代替,再進(jìn)行我們的Unit Test測(cè)試,否則就只有自個(gè)郁悶去吧。
??? 以上問(wèn)題出現(xiàn)在ASP.NET項(xiàng)目中對(duì)Web.config文件的讀取,至于WinForm程序的*.config文件想來(lái)也該有這個(gè)問(wèn)題,不過(guò)還沒(méi)有親自去驗(yàn)證。
??? 剛才做了一個(gè)方法的Unit Test,該方法依賴(lài)于Web.confing里面的一個(gè)定制參數(shù),于是郁悶就來(lái)了。當(dāng)我運(yùn)行測(cè)試代碼時(shí),發(fā)現(xiàn)那個(gè)Config里面配置參數(shù)總是為null。本來(lái)這個(gè)問(wèn)題應(yīng)該一點(diǎn)都不復(fù)雜,可是當(dāng)我查看程序編譯時(shí)的輸出信息時(shí),發(fā)現(xiàn)如下的一個(gè)Warning: 'System.Configuration.ConfigurationSettings.AppSettings'?is?obsolete:?'This?method?is?obsolete,?it?has?been?replaced?by?System.Configuration!System.Configuration.ConfigurationManager.AppSettings'
??? 本來(lái)還有點(diǎn)清醒的我被這個(gè)Warning搞糊涂了,還以為是舊的方法出了什么問(wèn)題被廢棄,結(jié)果把本來(lái)簡(jiǎn)單的問(wèn)題想的越來(lái)越復(fù)雜:(。于是按編譯提示把ConfigurationSettings改成了ConfigurationManager,顯然這是徒勞的,問(wèn)題依舊,還是無(wú)法取到Config文件里的參數(shù)值。
??? 在ConfigurationSettings和ConfigurationManager間又倒騰了半天,仍然是毫無(wú)起色。在郁悶了很久之后,突然醍醐灌頂想到,config文件是一個(gè)應(yīng)用的全局配置,應(yīng)該在應(yīng)用本身正常啟動(dòng)后才能被載入生效。由于Unit Test使用反射的方式載入assembly和class,再I(mǎi)nvoke被測(cè)試的方法,這樣一來(lái)本身的應(yīng)用沒(méi)有被正常的啟動(dòng),config信息當(dāng)然也就無(wú)從獲取。于是馬上啟動(dòng)應(yīng)用本身,果然就取到了config文件中配置的參數(shù)。
??? 所以在做Unit Test的時(shí)候,需要注意被測(cè)試的方法是否依賴(lài)了config文件中的參數(shù),如果有需要暫時(shí)使用hardcode的常量來(lái)代替,再進(jìn)行我們的Unit Test測(cè)試,否則就只有自個(gè)郁悶去吧。
??? 以上問(wèn)題出現(xiàn)在ASP.NET項(xiàng)目中對(duì)Web.config文件的讀取,至于WinForm程序的*.config文件想來(lái)也該有這個(gè)問(wèn)題,不過(guò)還沒(méi)有親自去驗(yàn)證。
轉(zhuǎn)載于:https://www.cnblogs.com/birdshome/archive/2006/03/16/UnitTest2005.html
總結(jié)
以上是生活随笔為你收集整理的在UnitTest中读取*.config文件的郁闷的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《Redis开发与运维》读书笔记三
- 下一篇: 模仿块级作用域