2011-09-22 61 views
6

對於某些測試我需要運行一個數據驅動的測試,使用ClassInitialize方法(通過使用反射)生成(通過反射)的配置。我嘗試了一切,但我無法正確設置數據源。MsTest,DataSourceAttribute - 如何讓它使用運行時生成的文件?

該測試需要一個csv文件中的類的列表(每個類一行),然後將測試到數據庫的映射工作得很好(即嘗試從每個實體的數據庫獲取一個項目,這將當表結構不匹配時拋出異常)。

的TestMethod的是:

[DataSource(
    "Microsoft.VisualStudio.TestTools.DataSource.CSV", 
    "|DataDirectory|\\EntityMappingsTests.Types.csv", 
    "EntityMappingsTests.Types#csv", 
    DataAccessMethod.Sequential) 
] 
[TestMethod()] 
public void TestMappings() { 

顯然,該文件是EntityMappingsTests.Types.csv。它應該在DataDirectory中。

現在,在Initialize方法中(用ClassInitialize標記),我把它放在一起,然後嘗試寫它。

我應該把它寫到哪裏? DataDirectory在哪裏?

我嘗試:

File.WriteAllText(context.TestDeploymentDir + "\\EntityMappingsTests.Types.csv", types.ToString()); 
File.WriteAllText("EntityMappingsTests.Types.csv", types.ToString()); 

兩個結果中的「單元測試適配器未能連接到數據源或讀取的數據」。更精確地說:

錯誤詳細信息:Microsoft Jet數據庫引擎找不到 對象'EntityMappingsTests.Types.csv'。確保對象存在 ,並且正確拼寫其名稱和路徑名稱。

那麼我應該把那個文件放在哪裏?

我也嘗試只寫它到當前目錄並取出DataDirectory部分 - 相同的結果。可悲的是,這裏的調試支持有限。

+0

請使用http://technet.microsoft.com/en-us/sysinternals/bb896645中的ProcessMonitor工具。在MSTest.exe或關聯的qtagent32.exe上放置一個過濾器,並找出它正試圖從哪個位置加載,以及在測試加載過程中的哪個時間點。那麼請在這裏提供關於這些細節的更新。 – kroonwijk

+0

你可以發佈taht asnwer,以便我可以接受它。愚蠢的我....你的建議工作,得到它的工作。 – TomTom

+0

當然,是這樣做的。 – kroonwijk

回答

5

請使用technet.microsoft.com/en-us/sysinternals/bb896645的ProcessMonitor工具。在MSTest.exe或關聯的qtagent32.exe上放置一個過濾器,並找出它正試圖從哪個位置加載,以及在測試加載過程中的哪個時間點。那麼請在這裏提供關於這些細節的更新。

1

將CSV文件添加到VS項目後,您需要打開它的屬性。將屬性「複製到輸出目錄」設置爲「始終複製」。 DataDirectory默認爲編譯的可執行文件的位置,它從輸出目錄運行,以便它可以在那裏找到它。

相關問題