具有微不足道的继承
private class TestBase : IEquatable<TestBase> {
public string Name { get; set; } = "test1";
public bool Equals(TestBase other) => this.Name == other.Name;
}
private class Test : TestBase {}
我需要比较两个集合:
var s1 = new TestBase();
var s2 = new Test();
Assert.Equal(s1, s2); // OK, uses IEquatable
Assert.StrictEqual(s1, s2); // OK uses IEquatable
Assert.Equal(new[] { s1 }, new[] { s2 }); // fails
Assert.Equal<IEnumerable<TestBase>>(new[] { s1 }, new[] { s2 }); // fails
Assert.Equal(new TestBase[] { s1 }, new TestBase[] { s2 }); // fails
对我来说,如果单个实例的Assert.Equal()
使用IEquatable
接口,则集合重载也应该使用该接口,并且不要比较类型。如何获得想要的行为?
答案 0 :(得分:0)
您是否尝试过使用Fluent断言进行比较?
我想到的是
x = new[] {s1};
y = new[] {s2};
x.Should().BeEquivalentTo(y, o => o.Excluding(p => p.Type));
表示两个对象集合彼此等效,但忽略类型。我还没有尝试使用类型的Exclusion()部分,但是它适用于单个对象属性,因此也许也尝试使其适用于您的示例。
有关流利断言的其他信息:https://fluentassertions.com/about/