Я пытаюсь создать модульный тест, который сравнивает два списка массивов строк.
Я попытался создать два одинаковых объекта List<string[]>
, но когда я использую CollectionAssert.AreEqual(expected, actual);
, тест не проходит:
[TestMethod]
public void TestList()
{
List<string[]> expected = new List<string[]> {
new string[] { "John", "Smith", "200" },
new string[] { "John", "Doe", "-100" }
};
List<string[]> actual = new List<string[]> {
new string[] { "John", "Smith", "200" },
new string[] { "John", "Doe", "-100" }
};
CollectionAssert.AreEqual(expected, actual);
}
Я также пробовал Assert.IsTrue(expected.SequenceEqual(actual));
, но это тоже не помогло.
Оба эти метода работают, если я сравниваю два списка строк или два массива строк, но они не работают при сравнении двух списков массивов строк.
Я предполагаю, что эти методы не работают, потому что они сравнивают два списка ссылок на объекты вместо строковых значений массива.
Как я могу сравнить два объекта List<string[]>
и сказать, действительно ли они одинаковы?
expected.Zip(actual, (e, a) => e.SequenceEqual(a)).All(x => x)
. - person Enigmativity   schedule 18.09.2017!expected.Zip(actual, (e, a) => e.SequenceEqual(a)).Contains(false)
. Но если два внешних списка имеют разное количество,Zip
просто остановится, когда в одном списке больше не будет записей, поэтому я думаю, что в этом случае вы можете получить ложное срабатывание. - person Jeppe Stig Nielsen   schedule 18.09.2017.Contains(false)
более эффективным, чем.All(x => x)
? - person Tot Zam   schedule 18.09.2017.Zip
не сравниваются полные длины. - person Enigmativity   schedule 18.09.2017false
. - person Enigmativity   schedule 18.09.2017.Contains(false)
отрицание не более (и не менее) эффективно, чем.All(x => x)
. Оба потребляют исходный код, пока не найдут записьfalse
. Первый сравнивает каждый элемент сfalse
с помощью компаратора равенства по умолчанию дляbool
. Второй вызывает делегатpredicate
, который оборачивает статический метод IL, выходящий из лямбда-стрелкиx => x
, и проверяет возвращаемые значения. Поскольку среда выполнения будет выполнять встраивание в любом случае, я думаю, что оба будут одинаково быстрыми (я не измерял). Согласен с @Enigmativity. - person Jeppe Stig Nielsen   schedule 18.09.2017