比较异常消息时 FluentAssertions 失败

FluentAssertions fails when comparing exception messages

我刚刚将我的旧项目更新为使用 4.13.0 版,ComparisonMode.Substring 有很多异常验证,但最新版本中不存在 ComparisonMode.Substring。我发现 this 解释说:

As a result of this, I decided that as of version 2.1, the ComparisonMode is obsolete and any assertions against the exception message is treated as a case-insensitive wildcard match.

但现在我得到了大量失败的测试:

Expected exception message to match the equivalent of "Value of argument 'PeriodEnd' must be greater than '01.01.0001'", but "Value of argument 'PeriodEnd' must be greater than '01.01.0001'. Value is '01.01.0001'.

Parameter name: PeriodEnd" does not.

我断言的字符串

Value of argument 'PeriodEnd' must be greater than '01.01.0001'

它期望的那个

Value of argument 'PeriodEnd' must be greater than '01.01.0001'. Value is '01.01.0001'.

Parameter name: PeriodEnd

但是从之前的"patch notes"来看应该是通配符,我断言的字符串是它真正的子串,为什么会失败呢?

您仍然需要将通配符添加到对 WithMessage 的调用中,就像您在 ComparisonMode.Wildcard 仍然存在时所做的那样。 this post:

中解释了基本原理

如果您需要验证某个字符串值或异常消息是否符合预期,请永远不要验证确切的消息。使用通配符来验证与验证行为是否符合预期相关的特定部分。如果您决定精炼所涉及的文本,它将避免意外失败的测试。