0

我有一个 C# 项目的视觉工作室解决方案。目前,我的解决方案中没有测试项目。所以我没有文件 *.vsmdi。

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

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

  1. 是否可以在不添加项目的情况下创建 .vsmdi?如果可能的话,怎么做?

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

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

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

4

1 回答 1

2

1) 从技术上讲,无需将测试项目添加到解决方案即可创建 .vsmdi 文件。由于 VSMDI 文件的内容是 XML,因此您可以手动编写它们或使用基于程序集中测试的工具生成它们。但是,当解决方案中不包含测试项目时,VSMDI 文件的用处不大,因为 VSMDI 文件的功能是管理您的测试。但是您仍然可以使用它们(另请参阅问题 2 的答案)。

如果您想手动编写 vsmdi 文件,您需要使用 SHA1 对 FQN 进行哈希处理,并创建哈希前 128 位的 Guid,如下所示(来自 Dominic Hopton 的代码)。有关更多信息,请参阅他的博客文章:TRX(和 VSMDI 文件)的有用内部结构

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) 不,只要 TestLink 元素的存储属性指向包含测试的正确程序集(相对于您的 vsmdi 文件),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 以来,Microsoft 决定弃用 VSMDI 文件(以及测试列表)。测试列表被测试类别(已经存在于 Visual Studio 2010 中)和播放列表所取代。测试类别是您可以在单个测试方法上设置的属性,并且可以在构建中使用。播放列表是在 Visual Studio 2012 Update 2 中引入的,目前在 MSBuild 中不受支持。

有关测试类别的更多信息,请参阅:http: //msdn.microsoft.com/en-us/library/dd286595.aspx

于 2013-03-18T21:54:44.037 回答