dotnet 使用 MSTestRunner 将单元测试制作为独立可执行文件

这篇具有很好参考价值的文章主要介绍了dotnet 使用 MSTestRunner 将单元测试制作为独立可执行文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

以往的单元测试都是不能单独作为一个独立的可执行文件跑的,需要在 VisualStudio 或 VSTest 或 dotnet test 里面运行。这就限制了运行单元测试的环境了,有时候开发者可能期望在无 SDK 或开发环境下执行单元测试,这时就可以用到本文介绍的 MSTestRunner 功能,将单元测试制作为独立可执行文件

将单元测试制作为可执行文件,运行此可执行文件即可运行单元测试。可执行文件可以作为独立框架发布的方式,如此可以在一些纯净的环境里面运行,或者是将单元测试打包分发给测试同事,请测试同事在大批量的设备上进行执行。如此可见,将单元测试制作为可执行文件在许多地方都有用武之地,如:

  • 在纯净系统环境运行
  • 在大批量设备统一执行
  • 允许外置工具调试单元测试执行情况

以上的 “允许外置工具调试单元测试执行情况” 一般指的是现有的性能调试工具,现有的性能调试工具基本都对独立应用程序支持的非常好,通过将单元测试制作为独立可执行文件可以更加方便与现有的性能调试工具进行对接

以下将和大家介绍如何利用 MSTestRunner 的功能,将单元测试制作为独立可执行文件

在开始之前,先建立一个简单的控制台项目。按照 dotnet 的惯例,先安装上 MSTest 这个 NuGet 库,可以编辑 csproj 文件,添加以下代码用来快速安装

  <ItemGroup>
    <PackageReference Include="MSTest" Version="3.2.0" />
  </ItemGroup>

为了让项目最终构建出来的是一个可执行文件,这里需要确保项目的输出类型是 Exe 类型,如下面代码

    <OutputType>Exe</OutputType>

再添加最关键的一句配置属性,即开启 MSTestRunner 的功能。配置此属性之后,且删除项目原本的 Program 文件,即可构建出测试项目的可执行文件

  <!-- 用 MSTest 测试运行器 -->
  <EnableMSTestRunner>true</EnableMSTestRunner>

编辑完成的 csproj 项目文件代码大概如下

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

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <PublishAot>true</PublishAot>
    <InvariantGlobalization>true</InvariantGlobalization>

    <!-- 用 MSTest 测试运行器 -->
    <EnableMSTestRunner>true</EnableMSTestRunner>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="MSTest" Version="3.2.0" />
  </ItemGroup>

</Project>

接着咱开始编写一个简单的单元测试用来测试一下此方式的行为

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace BearcenikoriDajebeqehe;

[TestClass]
public class TestClass
{
    [TestMethod]
    public void Foo()
    {
        var a = 1;
        a++;
        Assert.AreEqual(2, a);
    }
}

尝试构建项目,然后直接运行 exe 文件,大概就可以看到以下输出内容

Passed! - Failed: 0, Passed: 1, Skipped: 0, Total: 1, Duration: 289ms - BearcenikoriDajebeqehe.exe

可以使用命令行将其进行独立发布,如下面的命令行代码,将发布在 Linux 上的独立框架的可执行文件

dotnet publish -c release -r linux-x64 --self-contained true

以上发布内容可以在 Linux 上运行,本文这里通过 SyncTool 将输出内容同步到我的 UOS(统信国产 Linux 系统)系统上运行,运行结果界面如下图

dotnet 使用 MSTestRunner 将单元测试制作为独立可执行文件

这时就体现出这个功能的方便性起来了,原本我的 UOS(统信国产 Linux 系统)系统是不带任何的开发环境的,且在上面的开发体验现在还是不如在 Windows 上熟悉和舒服的。通过将单元测试构建为独立可执行文件,我就可以在 UOS 上只做测试的活,不参与具体的开发。将单元测试构建出来的可执行文件归档起来,通过单元测试可以更好的批量的测试其系统版本之间的行为差异。更多关于国产 UOS 的开发,欢迎加入 810052083 群讨论

本文以上代码放在github 和 gitee 欢迎访问

可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码

git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin 14c457e0d9933ba10e5eaf3873384bb3b9a0c26d

以上使用的是 gitee 的源,如果 gitee 不能访问,请替换为 github 的源。请在命令行继续输入以下代码

git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git
git pull origin 14c457e0d9933ba10e5eaf3873384bb3b9a0c26d

获取代码之后,进入 BearcenikoriDajebeqehe 文件夹

如果一个单元测试项目里面包含了多个单元测试方法,在做独立的可执行文件时,期望运行过程中只运行里面的部分方法,可以和原本的 vstest 或 dotnet test 一样添加过滤条件,也就是在执行时添加 --filter 参数和对应的条件内容,用法和 dotnet test 的用法相同,只是将命令行前面的 dotnet test 换成最终输出的可执行文件

详细请参阅 Run selected unit tests - .NET Microsoft Learn文章来源地址https://www.toymoban.com/news/detail-858652.html

到了这里,关于dotnet 使用 MSTestRunner 将单元测试制作为独立可执行文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Maven的单元测试没有执行的问题

    今天使用 Maven 的单元测试,正常导入以下的类 在项目的根目录下执行 mvn test,结果并没有执行单元测试,也是无语了。普通的 Java 项目可以正常运行,但是 Maven Web Java 工程,通过 mvn test 命令却无法成功执行测试用例。 后来网络上查看了资料, maven-surefire-plugin 不支持以前的

    2024年02月14日
    浏览(43)
  • 执行 JUnit 单元测试前,修改环境变量

    同一份代码,在不改变配置文件的情况下,可以连接不同的数据库,进行JUnit测试。 非开发、测试、生产环境的区别。而是   我就站在这里,指哪打哪! 避免重复造轮子,参考博文: 使用junitspring修改系统的环境变量,解决docker程序测试问题_junit 环境变量_fly-iot的博客-CS

    2024年02月07日
    浏览(46)
  • Unittest单元测试之unittest用例执行顺序

    当在一个测试类或多个测试模块下,用例数量较多时,unittest在执行用例 (test_xxx)时,并不是按从上到下的顺序执行,有特定的顺序。 unittest框架默认根据ACSII码的顺序加载测试用例,数字与字母的顺序为: 0~9,A~Z,a~z。 对于类来说,class TestAxx 会优先于class TestBxx被执行。

    2024年02月13日
    浏览(40)
  • UE5学习日记——制作多语言版本游戏,同时初步学习UI制作、多语言化、控制器配置、独立进程测试、打包配置和快速批量翻译等

    所有的文本类,无论变量还是控件等都能实现本地化,以此实现不同语言版本。 在这里先将重点注意标注一下: 所有文本类的变量、控件等都可以多语言; 本地化控制板中收集、编译时,别忘了编译这一步; 支持批量复制和粘贴文本字段 测试时必须要独立进程才能起效,

    2024年04月27日
    浏览(119)
  • Linux下安装junit,并通过命令执行junit单元测试

    1.首先你的Linux下应该已经安装了jdk,如果没有安装,请先查询安装,并配置好环境变量 2.首先找到你的jdk安装目录,如果你已经配置好环境变量的话,可以执行下面的语句:   博主的安装目录是/usr/lib/jvm/temurin-11-jdk-amd64/ 3.下载junit-4.11.jar和hamcrest-core-1.3.jar到这个目录里的l

    2024年02月04日
    浏览(44)
  • java程序启动时自动执行方法 @PostConstruct,单元测试@Test

    java程序启动时自动执行方法,在方法上添加@PostConstruct注解即可,可以代替单元测试junit的@Test注解 @PostConstruct //程序启动时自动执行方法 @Test //需要选中该方法运行启动(单元测试) java 代码----程序启动时自动执行方法 @PostConstruct java 代码----需要选中该方法运行启动(单元

    2024年02月05日
    浏览(44)
  • 【异常】IDEA中执行单元测试后提示IllegalStateException: javax.websocket.server.ServerContainer not available

    在SpringBoot项目中集成了WebSocket,在进行单元测试的时候,出现了以下错误: 代码中使用了POM文件spring-boot-starter-websocket,用于统计实时人数 单元测试类的原注解是这样的: 经查阅资料,得知SpringBootTest在启动的时候不会启动服务器,所以WebSocket自然会报错 这个时候需要添加

    2024年02月04日
    浏览(44)
  • IntelliJ IDEA中执行@Test单元测试时报错Class not found: "..."终极办法

    之前也出现过在编译时找不到测试类的问题,但之前的那篇博文,并不是终极办法IntelliJ IDEA中执行@Test单元测试时报错Class not found: \\\"...\\\"Empty test suite  出现类似问题,普遍时同然就报错了,原因是使用IDEA,从别人的Git上拉取代码后,别人把一些idea的配置文件也传上了,到时更

    2024年02月05日
    浏览(44)
  • 测试C#调用Vlc.DotNet组件播放视频

      除了Windows Media Player组件,在百度上搜索到还有不少文章介绍采用Vlc.DotNet组件播放视频,关于Vlc.DotNet的详细介绍见参考文献1,本文学习Vlc.DotNet的基本用法。   VS2022中新建基于.net core的winform程序,在Nuget包管理器中搜索Vlc.DotNet,选择其中的Vlc.DotNet.Forms包,该包用于

    2024年02月06日
    浏览(41)
  • C# 中的单元测试,如何使用单元测试进行程序测试和调试?

    单元测试是一种软件测试方法,用于测试单个功能或方法是否按预期工作。在 C# 中,可以使用 .NET 框架中的单元测试工具来编写和运行单元测试。 下面是使用 Visual Studio 内置的单元测试框架来创建一个简单的单元测试的步骤: 在 Visual Studio 中创建一个新的类库项目。 在新项

    2024年02月15日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包