I have the following test that surprisingly passes:
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);
}
In the FluentAssertions documentation it states that by default classes are compared using their members. How can this pass, since SubClassB clearly has one member more than SubClassA? I can make the test pass by changing to value semantics:
b.Should().BeEquivalentTo(a, options => options.ComparingRecordsByValue());
What is going on here? Thanks!
CodePudding user response:
Your assertion is telling FA to make sure that b is equivalent to a, and since SubClassA only has two properties, it will ignore the third property of SubClassB. In other words, the expectation drives the comparison.
