mstest.exe通过命令行执行* .vsmdi

问题描述:

我有一个C#项目的Visual Studio解决方案。目前,我的解决方案中没有测试项目。所以我没有文件* .vsmdi。mstest.exe通过命令行执行* .vsmdi

我想通过命令行测试我的项目。

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

  1. 是否有可能不增加项目,以创建.vsmdi?如果可能的话,如何?

  2. 要在命令行中执行,* .vsmdi文件必须存在于解决方案中?

  3. 如果我必须使用IDE进行测试,我应该在测试项目中有* .vsmdi文件?

  4. * .vsmdi文件的唯一用途是列出测试用例吗?

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