奇怪的 FluentAssertions 行为记录 类

Weird FluentAssertions behaviour with record classes

我意外地通过了以下测试:

abstract record class Base(string Property1);
sealed record class SubClassA(string Property1) : Base(Property1);
sealed record class SubClassB(string Property1, string Property2) : Base(Property1);
    
[Fact]
public void Test()
{
    var a = new SubClassA("test");
    var b = new SubClassB("test", "test");
    b.Should().BeEquivalentTo(a);
}

在 FluentAssertions documentation 中声明默认情况下 类 使用其成员进行比较。这怎么能通过呢,既然SubClassB明明比SubClassA多了一个成员?我可以通过更改为值语义来使测试通过:

b.Should().BeEquivalentTo(a, options => options.ComparingRecordsByValue());

这是怎么回事?谢谢!

您的断言是告诉 FA 确保 b 等同于 a,并且由于 SubClassA 只有两个属性,它将忽略第三个 属性 SubClassB 个。换句话说,期望驱动比较。