将MsTest测试套件迁移到xUnit

目录

介绍

背景

使用代码

步骤

一些微不足道的步骤

一些用于替换MsTest属性的夹具

兴趣点


介绍

如果您仅将MS Test用于单元测试,您可能会忽略本文,因为迁移运行良好的单元测试代码没有任何价值。

但是,如果您一直使用MS Test作为测试工具来构建某些集成测试套件,并且您可能希望独立于Visual Studio运行测试套件,则可能需要使用xUnit。在本文中,我假设您具有通过MS TestxUnit进行单元测试和集成测试的经验。

本文介绍了一些将MS测试代码高效转换为xUnit代码的技巧。

背景

2012年之前的几年里,我一直在使用MsTestNUnitxUnit。虽然与其他两个相比,xUnit有点难学,但自2012年以来,我一直专门将xUnit用于绿地项目,因为它的速度和集成测试的可扩展性。我不时地将一些遗留的测试套件从MsTest迁移到xUnit,本文主要基于我的博客从2014年发布的.NET FrameworkMsTest完全迁移到xUnit,但是,经过这么多年的一些更新:

  1. xUnit存储库已从CodePlex迁移到GitHub,作者发布了迁移指南:从MSTest迁移到xUnit.net
  2. Microsoft在2015年发布了一个开源控制台应用程序 XUnitConverter,用于将项目从使用MSTest转换为XUnit。
  3. xUnit.NET现在在.NET Core上,并且与.NET Framework上的库配合得很好。

使用代码

断言语句从MsTestxUnit的映射非常简单。对于95%的场景,简单的文本替换可能就足够了。因此,我编写了以下PowerShell脚本:

Param(
  [string]$ProjectDir
)
get-childitem $ProjectDir -recurse -include *.cs |
 select -expand fullname |
  foreach {
            (Get-Content $_) -replace '\[TestMethod\]','[Fact]' `
            -replace 'Assert.AreEqual' , 'Assert.Equal' `
            -replace 'Assert.AreNotEqual' , 'Assert.NotEqual' `
            -replace 'Assert.IsTrue' , 'Assert.True' `
            -replace 'Assert.IsFalse' , 'Assert.False' `
            -replace 'Assert.IsNotNull' , 'Assert.NotNull' `
            -replace 'Assert.IsNull' , 'Assert.Null' `
            -replace '\[TestClass\]' , ' ' `
            -replace 'Assert.AreNotSame' , 'Assert.NotSame' `
            -replace 'Assert.AreSame' , 'Assert.NotSame' `
            -replace 'Assert.IsInstanceOfType' , 'Assert.IsType' `
            -replace 'Assert.IsNotInstanceOfType' , 'Assert.IsNotType' `
            -replace 'using Microsoft.VisualStudio.TestTools.UnitTesting' , 'using Xunit' `
            | Set-Content -Encoding utf8 $_
            }

然后运行如下内容:

.\mstest2xunit.ps1 c:\MyProjects\MySolution\MyTestsProjectFolder

步骤

  1. 在.NET Core上创建新的xUnit测试项目,并导入除.NET Framework和MS Test之外的相同依赖项。
  2. 将旧版MsTest项目的CS文件添加到xUnit项目。
  3. 运行mstest2xunit.ps1

一些微不足道的步骤

  1. ExpectedExceptionAttribute替换为Assert.Throws
  2. 将xUnit fixtures替换像DeploymentItemAttribute这样的MsTest属性。

一些用于替换MsTest属性的夹具

兴趣点

xUnit.NETMicrosoftXUnitConverter的迁移指南是通过项目内迁移,即更改当前MsTest项目。我使用过这种项目内迁移方法,但很久以前也是手动的,但是,如果您在较旧的.NET Framework上有一些非常遗留的MsTest项目,您可能会不时发现一些神秘的障碍,可能是由一些旧的csproj格式引起的。从整体上来说,使用新的xUnit项目(.NET Core)有一个全新的开始,可以减少由遗留问题引起的麻烦。

https://www.codeproject.com/Tips/5373229/Migrate-MsTest-Test-Suites-to-xUnit

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值