2013-03-12 179 views
0

我有一個C#項目的Visual Studio解決方案。目前,我的解決方案中沒有測試項目。所以我沒有文件* .vsmdi。mstest.exe通過命令行執行* .vsmdi

我想通過命令行測試我的項目。

MSTest.exe /testmetadata:*.vsmdi /resultsfile:Logfile.log

  1. 是否有可能不增加項目,以創建.vsmdi?如果可能的話,如何?

  2. 要在命令行中執行,* .vsmdi文件必須存在於解決方案中?

  3. 如果我必須使用IDE進行測試,我應該在測試項目中有* .vsmdi文件?

  4. * .vsmdi文件的唯一用途是列出測試用例嗎?

回答

2

1)從技術上講,可以創建一個.vsmdi文件,而無需將您的測試項目添加到您的解決方案。由於VSMDI文件的內容是XML,所以您可以手動編寫它們,或者使用基於組裝中測試的工具生成它們。但是,當測試項目未包含在解決方案中時,VSMDI文件不太有用,因爲VSMDI文件的威力在管理您的測試。但是你仍然可以使用它們(參見問題2的答案)。

如果您想手工編寫vsmdi文件,您需要使用SHA1對FQN進行散列,並創建如下所示的哈希的前128位的Guid(來自Dominic Hopton的代碼)。查看他的博客文章的更多信息:Helpful Internals of TRX (and VSMDI files)

private static HashAlgorithm s_provider = new SHA1CryptoServiceProvider(); 

internal static HashAlgorithm Provider 
{ 
    get { return s_provider; } 
} 

/// Calculates a hash of the string and copies the first 128 bits of the hash 
/// to a new Guid. 
/// 

internal static Guid GuidFromString(string data) 
{ 
    byte[] hash = Provider.ComputeHash(
     System.Text.Encoding.Unicode.GetBytes(data)); 

    byte[] toGuid = new byte[16]; 
    Array.Copy(hash, toGuid, 16); 

    return new Guid(toGuid); 
} 

2)否,vsmdi文件不需要在你的溶液文件夾(或在解決方案),只要是Testlink元件點的含有試驗正確裝配的存儲屬性(相對到你的vsmdi文件)。例如:

<TestLink id="0c257cc9-ffed-cd5e-bda1-56df14ad68c2" name="AddOneAndTwo_Test" 
storage="TestProject\bin\debug\testproject.dll" /> 

3)Vsmdi文件存在於解決方案級而不是在項目級。如果您有多個測試項目,則可以使用一個vsmdi文件來管理所有測試。請注意,當您從Visual Studio運行測試時,存儲屬性會被忽略,假設您已將解決方案加載到解決方案中

4)使用Vsmdi文件管理解決方案中的測試,並且可以創建多個VSMDI文件中的圖層。例如,您想要測試的解決方案中有多個程序集。在根測試列表(稱爲:測試列表)下,爲您的每個項目創建一個測試列表。然後,您可以將其中一個項目的測試列表分爲兩個或更多單獨的測試列表(例如一個用於測試業務邏輯,另一個用於測試錯誤處理)。當您只想測試項目A的業務邏輯測試時,您可以選擇相應的測試列表並在其中運行測試。

約vsmdi文件的額外注:

A)由於的Visual Studio 2012微軟決定讓VSMDI文件(並與他們的測試列表)已過時。測試列表已被測試類別(已存在於Visual Studio 2010中)和播放列表取代。 測試類別是您可以在單個測試方法上設置的屬性,並且可以在構建中使用。播放列表是在Visual Studio 2012 Update 2中引入的,目前在MSBuild中不支持。

有關測試類別的更多信息,請參閱:http://msdn.microsoft.com/en-us/library/dd286595.aspx