[英]Accessing keys in appSettings in App.config across multiple projects in solution
我有一個大約7個不同項目的C#解決方案,每個項目都有各自的類來訪問我們的數據庫。 現在,我將數據庫服務器,用戶名和密碼存儲在啟動項目的app.config文件的AppSettings中。
App.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key ="dbServer" value="localhost"/>
<add key ="dbUser" value ="admin"/>
<add key ="dbPassword" value ="pw"/>
</appSettings>
...
</configuration>
在同一啟動項目中,我創建了一個類來查詢以下值:
public static class DBConfiguration
{
public static String getDBServer
{
get { return ConfigurationManager.AppSettings["dbServer"]; }
}
public static String getDBUser
{
get { return ConfigurationManager.AppSettings["dbUser"]; }
}
public static String getDBPassword
{
get { return ConfigurationManager.AppSettings["dbPassword"]; }
}
}
現在,當我在單元測試項目中時,我正在嘗試調用DBConfiguration.getDBServer
, DBConfiguration.getDBUser
等,並且它返回null。 如果將相同的appSettings復制到UT app.config中,則會得到結果。 我有點困惑這是怎么回事。 由於DBConfiguration位於啟動中-對DBConfiguration的調用也不應該在啟動時也引用app.config嗎?
另外,我已經添加了對System.Configuration
的引用。
您所看到的是設計使然。 ConfigurationManager
將從當前執行的程序集中提取設置。 因此,如果您的單元測試是當前正在執行的程序集,則ConfigurationManager
將從該app.config中獲取其設置。 這對於您出於測試目的連接到不同數據庫的情況很有用(應該...)
編輯
好的,所以根據您剛才提到的有關如何進行設置的內容,我不得不問為什么要以這種方式進行設置,以及為什么要進行檢查以查看是否在生產中。 當然有確鑿的理由,但我認為只要稍加周全,就可以避免在99%的情況下避免這種情況。 但是,由於您的帖子更多關於app.config文件,所以我會堅持下去。 如果您擁有相同的開發人員,都需要測試與數據庫的某種交互,則可以采取幾種方法。 一種方法(也是我最熟悉的一種方法)是使用存儲庫模式,在該模式下,您將擁有一個根據類返回或設置事物的接口。 典型的鍋爐平台代碼類似於以下內容:
public interface IRobotRepository()
{
IEnumerable<Robot> GetAllRobots();
Robot GetRobot(RobotParameters parameters);
void DeleteRobots();
void DeleteRobot(Robot robotToDelete);
}
授予存儲庫不一定要同時具有getter和setter的問題,關鍵是它是一種說明想要從存儲庫(例如數據庫)中獲取內容的方法。 這很簡單,我要說的就是重點。 有了它,您可以輕松地模擬它並測試專門依賴於該數據的功能。 不需要特定的配置,只需要所有內存即可。 然后,對於集成測試,您可以測試存儲庫是否按預期工作。 盡管您可以在每個開發人員的計算機上說出存儲庫(例如使用SqlLocalDb或Sqlite的內存數據庫),但是在使存儲庫與生產保持同步方面,還需要做更多的工作。 只是要平衡成本。 另一個選擇是擁有一個共享的通用QA / Dev / Sandbox數據庫。 這種方法也存在一些折衷,但通常沒什么大不了的。
請記住,雖然這只是一種方法,但還有很多其他方法會讓人們尖叫到死亡,這是最好的方法。 我只想指出,有多種方法可以對數據庫進行多個開發人員測試。 我很想知道您的方法最終成為什么,並說明您為什么走這條路。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.