2017-02-05 5 views
1

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

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

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

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

есть ли alterantive функция или определенный вариант, который сделает второй линии не получится?

+0

насчет добавления этого Assert: Assert.AreEqual (list1.GetType(), list2.GetType()); ? – KernelMode

+0

@KernelMode - это будет работать для этого конкретного примера, но мой фактический случай включает в себя словарь . Мне нужно проверить типы времени выполнения каждого индивидуального значения. CollectionAssert делает это, а также FluentAssertions после добавления шага, указанного в принятом ответе – FrequentGuest

ответ

2

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

Попробуйте удалить его первым:

AssertionOptions.EquivalencySteps.Remove<TryConversionEquivalencyStep>(); 

См Source

+0

Спасибо за ответ! Прочитав больше об этом, похоже, что это будет дефолт в FluentAssertions 5 - [соответствующее обсуждение] (https://github.com/dennisdoomen/FluentAssertions/issues/472). – FrequentGuest