使用 FluentAssertions API 4.x 语法迁移 xunit 项目以使用 FluentAssertions v5.x 版本运行

Posted

技术标签:

【中文标题】使用 FluentAssertions API 4.x 语法迁移 xunit 项目以使用 FluentAssertions v5.x 版本运行【英文标题】:Migrating xunit project with FluentAssertions API 4.x syntax to run using FluentAssertions v5.x version 【发布时间】:2019-06-04 12:56:39 【问题描述】:

我知道Redefining equivalency 中从 FluentAssertions v4.x 到 v5.x 有一个重大变化 所以,我应该修改:

        ShouldBeEquivalenTo ()

         Should().BeEquivalentTo()

还有很多变化。

我有 xunit 测试项目目标 net45 并开始迁移到多目标 netcoreapp2.1 和 net45。(FluentAssertions v4.x 不支持 netcoreapp2.x)

该项目有许多使用 4.x 旧语法的测试用例,我想尽量减少测试项目中的更改并避免(如果可以的话)修改为新语法。

我的选择是:

首先:我应该手动修改测试用例以支持 v5.x 的新语法

第二:您可能会建议作为替代方案。

你能告诉我最好的路径吗?

【问题讨论】:

【参考方案1】:

我确实使用了 Visual Studio 提供的 RegEx 搜索和替换来实现这一点。

【讨论】:

感谢@dennis Doomen 的回答。方法的签名有什么变化吗? 我也得出结论,搜索替换是最简单最有效的选择。 @VidmantasBlazevicius,我想确保方法的签名没有变化。你确定方法的参数没有变化吗? 正如您自己提到的,FA 引入了很多重大更改,主要是确保每个 API 都以 Should() 开头,但我已经使用搜索替换转换了大约 20K 测试。因为我是作者……【参考方案2】:

本回答基于@Dennis Doomen的回答

我在 VS2017 中使用了查找/替换正则表达式:

   Find:  Should(\w+)
   Replace: Should().$1

这个正则表达式替换表达式:

ShouldBeEquivalentTo, ShouldAllBeEquivalentTo, ShouldThrow and ShouldNotThrow

【讨论】:

以上是关于使用 FluentAssertions API 4.x 语法迁移 xunit 项目以使用 FluentAssertions v5.x 版本运行的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 FluentAssertions 在 XUnit 中测试 MediatR 处理程序

如何使用FluentAssertions在XUnit中测试MediatR处理程序

FluentAssertions Throw() 未列出使用

如何使用 FluentAssertions 检查对象是不是从另一个类继承?

如何使用 FluentAssertions 测试嵌套集合

FluentAssertions:排序列表的等价性