Пропустить проверку типа в равенстве коллекции в xUnit - PullRequest
0 голосов
/ 12 октября 2018

Имея тривиальное наследование

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 интерфейс коллекцииПерегрузка должна также использовать интерфейс и не сравнивать типы.Как получить желаемое поведение?

1 Ответ

0 голосов
/ 24 октября 2018

Вы пытались использовать Fluent Assertions для этого сравнения?

Я думаю о чем-то вроде

x = new[] {s1};
y = new[] {s2};
x.Should().BeEquivalentTo(y, o => o.Excluding(p => p.Type));

, который конкурирует, что две коллекции объектов эквивалентны друг другу, но игнорирует тип,Я еще не пробовал часть Exclude () с типом, но она работает для атрибутов отдельного объекта, поэтому, возможно, попробуйте сделать так, чтобы она работала и для вашего примера.

Дополнительная информация о Fluent Assertions: https://fluentassertions.com/about/

...