Есть ли способ, с FluentAssertions, контролировать, как значения словаря сравниваются для равенства?
У меня есть класс, одним из свойств которого является словарь (строка / двойной). Я хотел бы сравнить два экземпляра класса (ожидаемого и фактического) и для членов словаря, чтобы определить, как определяется «равенство».
Предполагая, что у меня есть класс, как показано:
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
var t1 = new Thing();
t1.Name = "Bob";
t1.Values.Add("Hello", 100.111);
t1.Values.Add("There", 100.112);
t1.Values.Add("World", 100.113);
var t2 = new Thing();
t2.Name = "Bob";
t2.Values.Add("Hello", 100.111);
t2.Values.Add("There", 100.112);
t2.Values.Add("World", 100.1133);
t1.Should().BeEquivalentTo(t2);
}
}
public class Thing
{
public string Name { get; set; }
public Dictionary<string, double> Values { get; set; } = new Dictionary<string, double>();
}
Я хотел бы иметь возможность указать, как, например, сравнивается запись «Мир» в словаре. В действительности может быть, что значения могут быть очень большими или одинаковыми в десяти десятичных разрядах (но не после этого), но я думаю, что мне может потребоваться сказать что-то вроде «того же, если разница меньше 1%»).
Мне нравится, как FluentAssertions сообщает мне член и почему они не совпадают, и попробовали пользовательский IAssertionRule (используя опции lambda), но это только казалось, сравнивает свойства класса, а не члены словаря.
Я не владею сравниваемыми классами, поэтому я не могу переопределить метод «Равный», и я не могу найти способ указать пользовательский сопоставитель (IEquatable), но я подозреваю, что потеряю четкую информацию о том, почему они не совпадают ,
Если бы это было возможно, но любой метод применим и к двойникам, которые были свойствами класса (в отличие от значений в словаре), это было бы нормально.
Благодарю.