2016-04-19 32 views
0

我有一個app.config工作正常。獲取應用程序設置,無需文件訪問

但我也有一個自動化測試工具,它可以在沒有任何文件訪問的環境下運行一些測試。所以我必須從字符串(或內存流)讀取一個配置文件,但是沒有將其物理映射到,因爲從這個自動測試過程中無法訪問文件系統。

在現實生活中,當然配置文件存儲在某處,但爲了自動化測試目的,我需要一些解決方法來從存儲在內存中的字符串讀取配置文件。它甚至有可能嗎?我GOOGLE了很多,但我發現的唯一的事情是Save it as temp file and then read,但它不是我的情況。

+0

可能會考慮某種數據庫作爲存儲,它不會是一個好的解決方案,雖然... – Vladimir

+0

什麼是您的工具可能的輸入?它可以讀取環境變量嗎?它是一種產品還是您創建的? – Gubr

+0

它可以讀取所有內容,只是用戶沒有權限或在磁盤上寫入。我現在正在尋找MMF,但仍然不確定它是否工作。 –

回答

1

避免你的的app.config或任何其他文件類的直接依賴。你的課不需要app.config或Properties.Settings。它需要這些文件中包含的值。

如果您爲測試目的而創建解決方法,那麼您正在測試您的類的不同版本。這是固有的問題 - 直接依賴這些文件是不可測試的。這並不意味着它們在某種程度上是壞的,或者我們不應該使用它們,只是需要值的類不應該從文件中讀取它們。

一個理想的解決方案是構造函數注入,一種依賴注入的形式。在構造函數中爲該類提供值並將其作爲字段存儲。這樣當創建類時,它始終具有所需的值。

在運行時,您可以使用依賴注入容器 - 這裏是walkthrough on setting one up for WCF。您可能採用不同的項目類型,但這些概念仍然適用。

但是對於測試而言,就像創建一個類並將想要使用的值傳遞給構造函數一樣簡單。當類從設置讀取時,使用不同的值進行測試是不可能的,但使用構造函數注入很容易。

+0

你說得對。這不是一個單元測試,它是一個集成測試,所以我需要適當的環境設置。因此,我會要求文件訪問,因爲無需文件本身就無法測試正確的文件解析。很遺憾'ConfigurationManager'沒有提供一個合適的API,但我不想爲它編寫一個包裝器,它可以處理關於serializarion本身的所有事情。是的,不可能嘲笑它,但我的測試目的就是完成這個任務:檢查用XML編寫的每個數據是否正確地映射到域對象上。 –

1

沒有配置文件,您將擁有默認設置。您可以覆蓋默認值:

Properties.Settings.Default["PropertyName"] = NewPropertyValue"; 

(設置你的設置類正確的訪問修飾符,並使用正確的命名空間,如果它是在一個庫)

0

作爲第一選擇,我會去的設置文件中你的情況。 即使您的用戶不會訪問設置文件內容。然後它將返回一個特定屬性的默認值。

你可以嘗試creaty一個愚蠢的控制檯應用程序

static void Main(string[] args) 
{ 
    Console.WriteLine(Settings.Default.MyProperty); 
    Console.ReadLine(); 
} 

是你設置你的價值在設置myProperty的標籤項目屬性的。 然後,您可以構建您的解決方案,打開二進制文件夾並刪除您的exe.config文件,您將看到該應用程序將使用默認值。

作爲第二個選項,您可以使用命令行參數。也可以成爲你的選擇。 (這裏有關命令行參數的一些棘手的情況下,文章Backslash and quote in command line arguments

第三選項,可以將您的文件在C:\用戶\你的應用程序用戶\應用程序數據\漫遊\ YourAppName文件夾。在這裏你應該被授予文件訪問,即使是受限用戶

由於教育的原因,我也建議看看這篇文章:https://msdn.microsoft.com/query/dev11.query?appId=Dev11IDEF1&l=EN-US&k=k(ApplicationSettingsOverview);k(TargetFrameworkMoniker-.NETFramework,Version%3Dv4.5)&rd=true 也許你會發現「加載網頁設置」選項很好。

調查的另一個。安迪可能是

相關問題