目录
介绍
如果您仅将MS Test用于单元测试,您可能会忽略本文,因为迁移运行良好的单元测试代码没有任何价值。
但是,如果您一直使用MS Test作为测试工具来构建某些集成测试套件,并且您可能希望独立于Visual Studio运行测试套件,则可能需要使用xUnit。在本文中,我假设您具有通过MS Test和xUnit进行单元测试和集成测试的经验。
本文介绍了一些将MS测试代码高效转换为xUnit代码的技巧。
背景
在2012年之前的几年里,我一直在使用MsTest、NUnit和xUnit。虽然与其他两个相比,xUnit有点难学,但自2012年以来,我一直专门将xUnit用于绿地项目,因为它的速度和集成测试的可扩展性。我不时地将一些遗留的测试套件从MsTest迁移到xUnit,本文主要基于我的博客从2014年发布的.NET Framework的MsTest完全迁移到xUnit,但是,经过这么多年的一些更新:
- xUnit存储库已从CodePlex迁移到GitHub,作者发布了迁移指南:从MSTest迁移到xUnit.net
- Microsoft在2015年发布了一个开源控制台应用程序 XUnitConverter,用于将项目从使用MSTest转换为XUnit。
- xUnit.NET现在在.NET Core上,并且与.NET Framework上的库配合得很好。
使用代码
断言语句从MsTest到xUnit的映射非常简单。对于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
步骤
- 在.NET Core上创建新的xUnit测试项目,并导入除.NET Framework和MS Test之外的相同依赖项。
- 将旧版MsTest项目的CS文件添加到xUnit项目。
- 运行mstest2xunit.ps1。
一些微不足道的步骤
- ExpectedExceptionAttribute替换为Assert.Throws。
- 将xUnit fixtures替换像DeploymentItemAttribute这样的MsTest属性。
一些用于替换MsTest属性的夹具
兴趣点
xUnit.NET和Microsoft的XUnitConverter的迁移指南是通过项目内迁移,即更改当前MsTest项目。我使用过这种项目内迁移方法,但很久以前也是手动的,但是,如果您在较旧的.NET Framework上有一些非常遗留的MsTest项目,您可能会不时发现一些神秘的障碍,可能是由一些旧的csproj格式引起的。从整体上来说,使用新的xUnit项目(.NET Core)有一个全新的开始,可以减少由遗留问题引起的麻烦。
https://www.codeproject.com/Tips/5373229/Migrate-MsTest-Test-Suites-to-xUnit