對於某些測試我需要運行一個數據驅動的測試,使用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部分 - 相同的結果。可悲的是,這裏的調試支持有限。
請使用http://technet.microsoft.com/en-us/sysinternals/bb896645中的ProcessMonitor工具。在MSTest.exe或關聯的qtagent32.exe上放置一個過濾器,並找出它正試圖從哪個位置加載,以及在測試加載過程中的哪個時間點。那麼請在這裏提供關於這些細節的更新。 – kroonwijk
你可以發佈taht asnwer,以便我可以接受它。愚蠢的我....你的建議工作,得到它的工作。 – TomTom
當然,是這樣做的。 – kroonwijk