介绍 MSTest Runner – CLI、Visual Studio 等

我们很高兴推出 MSTest runner,这是一个用于 MSTest 测试的新型轻量级运行程序。这个新的运行程序使测试更加便携和可靠,使测试运行得更快,并且可扩展,为您提供点菜测试体验,以添加成功所需的工具。

它是什么?

MSTest 运行程序是一种将 MSTest 测试构建为独立的可移植可执行文件并将其运行的方法。一个简单的控制台应用程序用于托管和运行您的测试,因此您不需要任何外部工具(例如vstest.consoledotnet test、 或Visual Studio)来运行测试。使其成为为功率或存储有限的设备编写测试的完美工具。

安装 MSTest 运行程序

所有经验水平和任何规模项目的开发人员都可以利用新 MSTest 运行程序的速度和便携性。我们欢迎您尝试一下!

MSTest.TestAdapter自 版本起,MSTest 运行程序就与 NuGet 包捆绑在一起3.2.0

为您的项目启用它就像安装更新的包并设置两个 MSBuild 属性一样简单,<EnableMSTestRunner>并且<OutputType>

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <!-- Enable the MSTest runner, this is an opt-in feature -->
    <EnableMSTestRunner>true</EnableMSTestRunner>
    <!-- We need to produce an executable and not a DLL -->
    <OutputType>Exe</OutputType>

    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>

    <IsPackable>false</IsPackable>
  </PropertyGroup>

  <ItemGroup>
    <!-- 
      MSTest meta package is the recommended way to reference MSTest.
      It's equivalent to referencing:
          Microsoft.NET.Test.Sdk
          MSTest.TestAdapter
          MSTest.TestFramework
          MSTest.Analyzers
    -->    
    <PackageReference Include="MSTest" Version="3.2.0" />

  </ItemGroup>

</Project>

进行这些更改后,重新构建您的测试项目,您的测试将创建一个直接运行您的测试的可执行文件:

​编辑

完整示例 – Simple1

在上面的屏幕截图中,您可以看到我们不需要 run dotnet test、 usevstest.console或 run inVisual Studio来运行我们的测试。我们的测试只是一个发现并运行测试的普通控制台应用程序。

也就是说,跑步者确实与dotnet test、 、集成vstest.consoleVisual Studio Test ExplorerVisual Studio Code Test Explorer您提供与您习惯的相同的体验。请参阅我们的文档以了解更多信息

使用 runner 与 VSTest 的优点

可移植性

直接从可执行文件运行测试消除了运行测试通常所需的大量复杂性和基础设施。由于测试项目不再特殊,因此您可以使用现有dotnet工具对测试项目执行有趣的操作,例如将它们构建为独立的:

dotnet publish --runtime win-x64 --self-contained

上面的示例将发布测试项目及其需要运行的运行时。这允许您将项目移动到没有此运行时的计算机,并在多台计算机上运行测试,而无需进行额外的设置。

或者,您可以使用此功能在每次失败的测试运行后创建一个 zip 文件,以与在 CI 服务器上失败的方式相同的方式在本地重现故障,并获得一种简单的方法来交互式调试失败的运行。

下面是针对托管在没有可用 dotnet SDK 的 docker 容器中的 dotnet 应用程序运行测试的另一个示例。对于我们的高级用户来说,这是一个经常遇到问题的场景:

RunInDocker> docker build . -t my-server-tests

RunInDocker> docker run my-server-tests
Microsoft(R) Testing Platform Execution Command Line Tool
Version: 1.0.0-preview.23622.9+fe96e7475 (UTC 2023/12/22)
RuntimeInformation: linux-x64 - .NET 8.0.0
Copyright(c) Microsoft Corporation.  All rights reserved.
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://[::]:8080
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
      Content root path: /test/test
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
      Request starting HTTP/1.1 GET http://localhost:8080/hello - - -
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
      Executing endpoint 'HTTP: GET /hello'
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
      Executed endpoint 'HTTP: GET /hello'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
      Request finished HTTP/1.1 GET http://localhost:8080/hello - 200 - text/plain;+charset=utf-8 73.5556ms
Passed! - Failed: 0, Passed: 1, Skipped: 0, Total: 1, Duration: 1.7s - MyServer.Tests.dll (linux-x64 - .NET 8.0.0)

完整示例 – RunInDocker

MSTest 运行程序可移植性的另一个优点是,您现在可以像调试任何常规可执行文件一样轻松调试测试。例如,Visual Studio您现在可以简单地:

  1. 在“解决方案资源管理器”中导航要运行的测试项目,右键选择它并选择“设置为启动项目”
  2. 导航到要调试的测试并添加断点
  3. 选择“调试” > “开始调试”(或使用F5)来运行选定的测试项目。

您还可以使用--filter过滤器筛选出您想要调试的一个或多个方法,以加快调试速度。例如,--filter MSTestNamespace.UnitTest1.TestMethod2仅允许运行(调试)namespace 中的TestMethod2类中的测试方法。您可以在text找到有关可用过滤器的更多信息。这是一个示例:UnitTest1MSTestNamespacelaunchSettings.json

{
  "profiles": {
    "MSTestProject": {
      "commandName": "Project",
      "commandLineArgs": "--filter MSTestNamespace.UnitTest1.TestMethod2"
    }
  }
}

最后,我们正在研究使 MSTest NativeAOT 兼容,以便您在 NativeAOT 模式下测试应用程序。为了能够做到这一点,我们需要显着改变 MSTest 的内部结构,如果您觉得这有用,请在我们的 GitHub 问题上添加评论或点赞

表现

MSTest 运行程序使用较少的一个进程和一个进程跳跃来运行测试(与 相比dotnet test),以节省构建服务器上的资源。

它还避免了进程间串行通信的需要,并依赖现代 .NET API 来提高并行性并减少占用空间。

在改用新的 MSTest 运行程序的 Microsoft 内部项目中,我们看到 CPU 和内存都得到了巨大的节省。一些项目在使用dotnet test.

尽管这些数字可能令人印象深刻,但当您在测试项目中启用并行测试运行时,可以获得更大的收益。为了解决这个问题,我们添加了一组新的MSTest 代码分析分析器,以促进良好的实践和正确的测试设置。

可靠性

MSTest 运行程序正在设置新的默认值,这些默认值更安全,并且使您更难意外错过运行任何测试。在做决定时,我们总是倾向于更严格,而当你不需要这种严格时,让你选择。

例如,当项目运行零个测试时,MSTest 运行程序将默认失败,这可以通过 控制--minimum-expected-tests,默认为1。您可以将其设置为0, 以便在没有测试时不会失败,但您可以轻松地将其设置为更高的数字以防止回归:

C:\p\testfx\samples\mstest-runner\Simple1> C:\p\testfx\artifacts\bin\Simple1\Debug\net8.0\Simple1.exe --minimum-expected-tests 10
Microsoft(R) Testing Platform Execution Command Line Tool
Version: 1.0.0-preview.23622.9+fe96e7475 (UTC 2023/12/22)
RuntimeInformation: win-x64 - .NET 8.0.0
Copyright(c) Microsoft Corporation.  All rights reserved.
Minimum expected tests policy violation, tests ran 1, minimum expected 10 - Failed: 0, Passed: 1, Skipped: 0, Total: 1, Duration: 153ms - Simple1.dll (win-x64 - .NET 8.0.0)

但这并不是唯一的可靠性改进。我们从头开始编写 MSTest 运行程序以使其更加可靠。

MSTest 运行程序由于其新架构,不依赖文件夹扫描、动态加载或反射来检测和加载扩展。这使得在本地和 CI 中更容易实现相同的行为,并且显着缩短了启动测试应用程序和运行第一个测试之间的时间。

运行器被设计为异步且可并行,从而防止使用 VSTest 时出现的一些挂起或死锁。

运行程序不会检测目标框架或平台,或任何其他 .NET 配置。它完全依赖 .NET 平台来做到这一点。这避免了逻辑重复,并避免了当规则突然改变时许多会破坏测试的边缘情况。

可扩展性

MSTest 运行程序基于新的准系统测试平台和可扩展性模型,可以轻松扩展或覆盖测试执行的许多方面。

现在可以轻松提供您自己的报告生成器、测试编排、记录器,甚至增加可用的命令行选项。

Microsoft 提供了一系列可选扩展,以便您配备运行测试和排除故障所需的一切。

我们将继续努力提供更多扩展和功能,以丰富您的测试体验。如果您有特定需求或想帮助开发库扩展,请与我们联系。

概括

MSTest 运行程序是一个高性能、可托管、可扩展、可靠且集成的解决方案,用于运行 MSTest 测试。无论您是技术爱好者、遇到 VSTest 的一些问题还是只是好奇,我们都欢迎您尝试并在本文下面分享您的反馈。

文章作者 | Amaury Levé(阿莫里·莱韦),Marco Rossignoli(马可·罗西诺利),Jakub Jareš(雅库布·贾雷斯)

  • 18
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Visual Studio 是一款由 Microsoft 开发的集成开发环境(IDE),用于编写、调试和部署各种类型的应用程序,包括桌面应用程序、Web 应用程序、移动应用程序等。 使用 Visual Studio,你可以进行以下操作: 1. 创建项目:在 Visual Studio 中,你可以创建各种类型的项目,例如C#、C++、Java、Python等。选择相应的项目模板,配置项目属性,并开始编写代码。 2. 编写代码:Visual Studio 提供了语法高亮、智能感知和自动完成等功能,能够提高编码效率。你可以在代码编辑器中编写代码,并使用调试功能进行调试。 3. 调试应用程序:Visual Studio 内置了强大的调试工具,如断点调试、变量监视、堆栈跟踪等,可以帮助你找出代码中的错误并进行修复。 4. 构建和运行应用程序:通过 Visual Studio,你可以构建和生成应用程序的可执行文件或安装包。你可以选择不同的构建选项,如调试版本或发布版本,并在本地或远程环境中运行应用程序。 5. 集成其他工具和扩展:Visual Studio 支持与其他开发工具和服务进行集成,如版本控制系统(Git、SVN)、自动化构建工具(MSBuild)、测试框架(NUnit、MSTest)等。此外,你还可以通过安装扩展来增加额外的功能和工具。 总结来说,Visual Studio 是一个功能强大且灵活的开发环境,适用于各种类型的应用程序开发。无论是个人开发者还是团队开发,都可以使用 Visual Studio 提高开发效率,并创建高质量的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值