奇怪的 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
个。换句话说,期望驱动比较。
我意外地通过了以下测试:
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
个。换句话说,期望驱动比较。