我有一些单元测试似乎失败了,因为它们依赖于假设本地编译的 here-document 字符串中的换行符应该匹配Environment.NewLine。
IE
var testString=@"a multiline
string";
//this fails
teststring.Should().Be("a multiline" + Environment.Newline +"string");
真正的测试要复杂得多,并且是在我无法控制的机器上编译和运行的,因此很难确定确切的原因,但似乎确实可以归结为这种不匹配。
C# 规范(请参阅字符串文字部分)说“逐字字符串文字可能跨越多行”,但实际上并没有说明将使用哪种换行样式。
我的工作理论是,换行符没有什么神奇之处,编译器只是使用源代码文件中的任何样式,因为它是在本地机器上签出的。因此,如果有人在某处弄错了 RCS 行翻译,则编译后的字符串可能具有 Unix 风格的行尾,即使它是在 Windows 机器上编译的,反之亦然。
所以我的问题是:
是否有关于如何对多行逐字字符串文字中的换行符进行编码的正式描述?
如果没有,是否有其他解释可以解释为什么上面的测试有时会失败?
我知道Environment.NewLine是一个运行时变量,因此如果在一台机器上编译然后在另一台机器上运行,测试可能会失败,但在这种情况下,它似乎正在编译并在同一台机器上运行。