You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用FluentAssertions实现不同类型的记录对象比较?

解决FluentAssertions中自定义类型与字符串的等价比较问题

你遇到的问题是WithMapping用法不对,它主要用于对象结构间的属性映射,而非不同类型值的比较逻辑覆盖。要让MyDomainPrimitive和字符串能等价比较,应该用Using+InsteadOf来指定类型转换的比较规则。

修改后的测试代码如下:

public record MyDomainPrimitive
{
    public static MyDomainPrimitive Create(string value) => new MyDomainPrimitive { Value = value };
    public string Value { get; init; } = "";
}

[Fact]
public void CanMap()
{
    var complex = new
    {
        Id = MyDomainPrimitive.Create("a"),
    };

    var simple = new
    {
        Id = "a",
    };

    complex.Should().BeEquivalentTo(simple, opt => opt
        .Using<MyDomainPrimitive>(ctx => ctx.Subject.Value.Should().Be(ctx.Expectation as string))
        .InsteadOf<string>());
}

代码说明:

  • Using<MyDomainPrimitive>(...):告诉FluentAssertions,当遇到MyDomainPrimitive类型的对象时,使用自定义的比较逻辑。
  • ctx.Subject.Value.Should().Be(ctx.Expectation as string):取实际值(MyDomainPrimitive对象)的Value属性,和预期的字符串值做相等校验。
  • InsteadOf<string>():明确指定这个规则适用于预期值类型是string的场景,刚好匹配你这里complex.Id(MyDomainPrimitive)和simple.Id(string)的比较场景。

这样修改后,测试就能正常通过,断言系统会自动把MyDomainPrimitive对象转换成它的Value属性,再和字符串做比较。

内容的提问来源于stack exchange,提问作者LosManos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 02:42:06