如何创建自定义 FluentAssertion 错误消息?

Posted

技术标签:

【中文标题】如何创建自定义 FluentAssertion 错误消息?【英文标题】:How to create custom FluentAssertion error messages? 【发布时间】:2021-10-29 04:12:27 【问题描述】:

我有一个看起来像这样的测试:

using (new AssertionScope())

    foreach (var parameterType in parameterTypes)
    
        var fooType = typeof(IFoo<>);
        var genericType = providerType.MakeGenericType(parameterType);

        serviceProvider
            .GetService(fooType)
            .Should()
            .NotBeNull($"all Foo types should be registered");
    

测试失败导致此消息:

预期 serviceProvider.GetService(genericProviderType) 不是 ,因为所有 Foo 类型都应该注册。

但是,我希望消息说:

预期 IFoo 不是 ,因为所有 Foo 类型都应该注册。

(我已经有了美化类型名的方法 - type.GetPrettyName

根据文档和源代码,我似乎需要找到一种方法来修改主题/标识符(不是 100% 确定),但我找不到这样做的方法。

我也尝试在 AssertionScope 构造函数中使用延迟上下文函数,但这会导致修改后的闭包。

【问题讨论】:

【参考方案1】:
using (new AssertionScope())

    foreach (var parameterType in parameterTypes)
    
        var fooType = typeof(IFoo<>);
        var genericType = providerType.MakeGenericType(parameterType);

        using _ = new AssertionScope(fooType.GetPrettyName());
       
        serviceProvider
            .GetService(fooType)
            .Should()
            .NotBeNull($"all Foo types should be registered");
    

【讨论】:

以上是关于如何创建自定义 FluentAssertion 错误消息?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 FluentAssertion 测试一个对象是不是等同于另一个已设置属性 solidcolorbrush 的对象

如何检查是不是可以在 Fluent Assertion 中使用 ContainValue 验证类型类的字典

FluentAssertion : 用私有内部对象列表断言对象相等

IDM自定义报错页面

检查 FluentAssertion 异常语法中的返回值

FluentAssertion - 向 if 语句添加断言