FluentAssertionsを使用しています。オブジェクトのリストを2つ比較する必要があります。それらはValuesプロパティを含む同じクラスからのものです。.Net FluentAssertions。オブジェクトが正しくオブジェクトを比較しません。
両方のリストを比較したいが、list1のすべての値をlist2に存在させたいが、余分な値は無視する。このような何か:
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);
}
}
}
しかし、これはスロー:
期待コレクション{
プログラム値{ID = 1 someValueの= "テスト"}、
プログラム+ +値{ Id = 2 SomeValue = "テスト"}}含まれる
プログラム+値{Id = 1 SomeValue = "テスト"}
だからいくつかの質問:予想通り
なぜ働いて入っていないですか?
ShouldBeEquivalentToではなくContainsを使用するようにデフォルトリストの比較を変更するなど、1行で行うことは可能ですか?
クラスのコレクションからプロパティを除外するにはどうすればよいですか? 私はthis questionとthis oneを見ましたが、コレクションには当てはまりません。また、PropertyPathを使用しようとすると、プログラムはコンパイルされません。私は.Net Coreを使用していますが、私も4.6で試してみました。
はい、しかし、私は同値を比較したいと思います。この場合、次の行に示すように例外がスローされるべきではありません: list2 [0] .Values [0] .ShouldBeEquivalentTo(list1 [0] .Values [0]); –