CollectionAssert.AreEquivalent во FluentAssertions?

Я пытаюсь заменить использование "CollectionAssert.AreEquivalent()" на FluentAssertion.

Я пробовал использовать ShouldAllBeEquivalentTo, но функция не дает сбоев при сравнении похожих объектов разных типов.

В приведенном ниже примере оба вызова выполняются успешно. Я хочу, чтобы 2-й провалился.

new int[] { 1, 2 }.ShouldAllBeEquivalentTo( new int[] { 2, 1 } );       
new int[] { 1, 2 }.ShouldAllBeEquivalentTo( new string[] {"1", "2"} );  

Есть ли альтернативная функция или определенная опция, которая приведет к сбою 2-й строки?


person FrequentGuest    schedule 05.02.2017    source источник
comment
как насчет добавления этого утверждения: Assert.AreEqual(list1.GetType(), list2.GetType()); ?   -  person KernelMode    schedule 05.02.2017
comment
@KernelMode - это сработает для этого конкретного примера, но мой фактический случай связан со словарем «строка, объект». Мне нужно проверить типы времени выполнения каждого отдельного значения. CollectionAssert делает это, а также FluentAssertions после добавления шага, подробно описанного в принятом ответе.   -  person FrequentGuest    schedule 06.02.2017


Ответы (1)


Это потому, что по умолчанию используется TryConversionEquivalencyStep, и он будет рассматривать как "1", так и 1 как равные (после попытки преобразования).

Попробуйте сначала удалить его:

AssertionOptions.EquivalencySteps.Remove<TryConversionEquivalencyStep>();

См. Источник

person haim770    schedule 05.02.2017
comment
Спасибо за ответ! Прочитав об этом больше, кажется, что это будет по умолчанию в FluentAssertions 5 - соответствующее обсуждение< /а>. - person FrequentGuest; 06.02.2017