我今天遇到了一个奇怪的问题。 我有一个这样的逐字字符串:
var s = @" 0 1
0 0"
即在一行之后有一行新行。 我的环境换行符设置为 \r
这是单元测试的一部分,过去几个月测试运行良好。 现在,当我运行测试时,上面的字符串声明会导致:
" 0 1n 0 0"
而不是
" 0 1rn 0 0"
意味着测试失败。
我已经抛弃了每一个角色来证明这是真的。 我也尝试不使用逐字字符串,而是像这样:
var s = " 0 1rn 0 0"
然后测试通过。
有谁知道这里会发生什么?
答案是这样的:Git(很可能(将文件中的行尾交换为LF。 在单元测试中依赖文件行结尾不是一个好主意,因此我更改了代码以在所有情况下都显式指定换行符,因此:
var s = " 0 1rn 0 0"
如果要在单元测试中使用字符串,最好确保内容始终相同。我建议这样声明:
var s = $" 0 1{Enviroment.NewLine}0 0";
可以将字符串内插与逐字一起使用来添加控制字符。
var s = @$" 0 1{'r'}
0 0"
请检查此答案 - 基本上是由代码编辑器行尾设置引起的。我们在单元测试中遇到了同样的问题。