Есть ли способ, с помощью FluentAssertions, контролировать, как значения словаря сравниваются на равенство?
У меня есть класс, одним свойством которого является словарь (string / double).Я хотел бы сравнить два экземпляра класса (ожидаемый и фактический) и для членов словаря, чтобы указать, как определяется «равенство».
Предполагая, что у меня есть класс, как показано:
[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 (используя Options lambda), но он только сравнивал свойства класса, а не членов словаря.
Мне не принадлежат сравниваемые классы, поэтому я не могу переопределить метод "Equal", и я не могу найти способ указать пользовательский компаратор (IEquatable) - но я подозреваю, что потерял бы беглые детали того, почемуони не одинаковы.
Если бы это было возможно, но то, что любой метод также применялся бы к двойникам, которые были свойствами класса (в отличие от значений в словаре), это было бы нормально.
Спасибо.