Я использую FluentAssertions, и мне нужно сравнить 2 списка объектов. Они из того же класса, который содержит свойство Values.
Я хочу сравнить оба списка, но я хочу, чтобы все значения из списка1 существовали в списке2, но игнорируют дополнительные значения. Что-то вроде этого:
using System.Collections.Generic;
using FluentAssertions;
public class Program
{
public class Value
{
public int Id { get; set; }
public string SomeValue { get; set; }
}
public class MyClass
{
public int Id { get; set; }
public string Name { get; set; }
public List<Value> Values { get; set; }
}
public static void Main()
{
var list1 = new List<MyClass>
{
new MyClass
{
Id = 1,
Name = "Name 1",
Values = new List<Value>
{
new Value {Id = 1, SomeValue = "Test" }
}
}
};
var list2 = new List<MyClass>
{
new MyClass
{
Id = 1,
Name = "Name 1",
Values = new List<Value>
{
new Value {Id = 1, SomeValue = "Test" },
new Value {Id = 2, SomeValue = "Test" }
}
}
};
list2.Should().HaveSameCount(list1);
// This doesn't throw, just proving that the first object is equivalent
list2[0].Values[0].ShouldBeEquivalentTo(list1[0].Values[0]);
for (var x = 0; x < list2.Count; x++)
{
list2[x].ShouldBeEquivalentTo(list1[x], options => options.Excluding(s => s.Values));
// This throws, but it shouldn't
list2[x].Values.Should().Contain(list1[x].Values);
}
}
}
Но это бросает:
Ожидаемая коллекция {
Program+Value {Id = 1 SomeValue = "Test"},
Program+Value { Id = 2 SomeValue = "Test" }} для содержания
Program+Value {Id = 1 SomeValue = "Test"}
Итак, несколько вопросов:
Почему «Содержит» не работает должным образом?
Можно ли сделать это в одной строке, например, изменив сравнение списка по умолчанию, чтобы использовать Contains вместо ShouldBeEquivalentTo?
Как исключить свойство из коллекции класса? Я просмотрел этот вопрос и этот но они, кажется, не применяются к коллекциям. Кроме того, программа не компилируется, если я пытаюсь использовать PropertyPath. Я использую .Net Core, но пробовал и с 4.6, тоже не работает.