Я сталкивался с этой проблемой несколько раз, когда пишу модульные тесты, в которых необходимо сравнить ожидаемые строки из нескольких строк с фактическими выходными строками.
Например, если я пишуметод, который выводит многострочную строку. Меня интересует, как выглядит каждая строка, но мне нет дела до конкретного символа новой строки, используемого на компьютере с Windows или Mac.
В моем случае я просто хочу заявитьчто каждая строка равна в моих модульных тестах и выручает, если один из них не.
public static void AssertAreLinesEqual(string expected, string actual)
{
using (var expectedReader = new StringReader(expected))
using (var actualReader = new StringReader(actual))
{
while (true)
{
var expectedLine = expectedReader.ReadLine();
var actualLine = actualReader.ReadLine();
Assert.AreEqual(expectedLine, actualLine);
if(expectedLine == null || actualLine == null)
break;
}
}
}
Конечно, вы также можете сделать метод немного более универсальным и написать, чтобы вернуть bool
вместо этого.
public static bool AreLinesEqual(string expected, string actual)
{
using (var expectedReader = new StringReader(expected))
using (var actualReader = new StringReader(actual))
{
while (true)
{
var expectedLine = expectedReader.ReadLine();
var actualLine = actualReader.ReadLine();
if (expectedLine != actualLine)
return false;
if(expectedLine == null || actualLine == null)
break;
}
}
return true;
}
Что меня больше всего удивляет, так это то, что подобный метод не включен ни в одну из модулей модульного тестирования, которые я использовал.