Соответствует ли стиль перевода строки документа C # здесь Environment.Newline? - PullRequest
0 голосов
/ 06 июня 2019

У меня есть некоторые модульные тесты, которые, похоже, не работают, потому что они зависят от предположения, что разрыв строки внутри локально скомпилированной строки здесь-документа должен совпадать с Environment.NewLine .

Т.е.

var testString=@"a multiline
string";
//this fails
teststring.Should().Be("a multiline" + Environment.Newline +"string"); 

Реальный тест значительно сложнее, он компилируется и запускается на компьютере, который я не контролирую, поэтому трудно определить точную причину, но, похоже, онсводится к этому несоответствию.

Спецификация C # (см. раздел о строковых литералах) говорит, что "Строковый литерал может содержать несколько строк" , нофактически не говорит, какой стиль разрыва строки будет использован.

Моя рабочая теория заключается в том, что в переносах строк нет ничего волшебного, и что компилятор просто использует любой стиль в файле с исходным кодом, который проверяется на локальной машине.Поэтому, если кто-то неправильно интерпретирует свои строки в RCS, возможно, строка, скомпилированная, имеет строки в стиле Unix, даже если она компилируется на компьютере с Windows или наоборот.

Так что мойвопрос на самом деле:

Есть ли формальное описание того, как следует кодировать разрывы строк в многострочном дословном строковом литерале?

Если нет, естьальтернативное объяснение того, почему приведенный выше тест может иногда давать сбой?

Я знаю, что Environment.NewLine является переменной runtime , поэтому тест может завершиться неудачно, есликомпилируется на одной машине, затем запускается на другой, но в этом случае оказывается, что она компилируется и запускается на той же машине.

...