逐字字符串缺少回车 return
Verbatim string is missing carriage return
今天遇到一个奇怪的问题。我有这样的逐字字符串:
var s = @" 0 1
0 0"
即在一个之后有一个新行。我的 Environment.NewLine 设置为 \r\n
这是单元测试的一部分,在过去的几个月里测试一直运行良好。现在,当我 运行 我的测试时,上面的字符串声明导致:
" 0 1\n 0 0"
而不是
" 0 1\r\n 0 0"
意味着测试失败。
我把每一个字都甩出来证明这是真的。我也试过不使用逐字字符串,而是像这样:
var s = " 0 1\r\n 0 0"
然后测试通过。
有人知道这里会发生什么吗?
如果要在单元测试中使用字符串,最好确保内容始终相同。我建议这样声明:
var s = $" 0 1{Enviroment.NewLine}0 0";
答案是这样的:Git(最有可能)将文件中的行结尾交换为 LF。根据单元测试中的文件行结尾不是一个好主意,所以我更改了代码以在所有情况下明确指定换行符,因此:
var s = " 0 1\r\n 0 0"
您可以使用字符串插值和 verbatim 一起使用来添加控制字符。
var s = @$" 0 1{'\r'}
0 0"
请检查这个answer - 基本上它是由代码编辑器行尾设置引起的。我们在单元测试中遇到了同样的问题。
今天遇到一个奇怪的问题。我有这样的逐字字符串:
var s = @" 0 1
0 0"
即在一个之后有一个新行。我的 Environment.NewLine 设置为 \r\n
这是单元测试的一部分,在过去的几个月里测试一直运行良好。现在,当我 运行 我的测试时,上面的字符串声明导致:
" 0 1\n 0 0"
而不是
" 0 1\r\n 0 0"
意味着测试失败。
我把每一个字都甩出来证明这是真的。我也试过不使用逐字字符串,而是像这样:
var s = " 0 1\r\n 0 0"
然后测试通过。
有人知道这里会发生什么吗?
如果要在单元测试中使用字符串,最好确保内容始终相同。我建议这样声明:
var s = $" 0 1{Enviroment.NewLine}0 0";
答案是这样的:Git(最有可能)将文件中的行结尾交换为 LF。根据单元测试中的文件行结尾不是一个好主意,所以我更改了代码以在所有情况下明确指定换行符,因此:
var s = " 0 1\r\n 0 0"
您可以使用字符串插值和 verbatim 一起使用来添加控制字符。
var s = @$" 0 1{'\r'}
0 0"
请检查这个answer - 基本上它是由代码编辑器行尾设置引起的。我们在单元测试中遇到了同样的问题。