我有像这样的文件内容
XXX,AAAAAA,B,CC;Cont 123456;2.50;1;1;1;2;0;1;l;
XXX,AAAAAA,B,CC;Avboo;1.20;1;1;1;2;0;1;l;
XXX,AAAAAA,B,CC;Dartw esata garle;3.00;1;1;1;2;0;1;ccc;
文件保存在c:\ myFile.txt
中在我的nunit测试中,我正在尝试创建精确的字符串,因为在文件内容中,之后我想断言它是相等的
[Test]
public void test()
{
string line1 = "XXX,AAAAAA,B,CC;Cont 123456;2.50;1;1;1;2;0;1;l;\r\n";
string line2 = "XXX,AAAAAA,B,CC;Avboo;1.20;1;1;1;2;0;1;l;\r\n";
string line3 = "XXX,AAAAAA,B,CC;Dartw esata garle;3.00;1;1;1;2;0;1;ccc;\r\n";
string expected = string.Concat(line1,line2,line3);
var fileContent = File.ReadAllText(@"C:\myFile.txt");
Assert.AreEqual(fileContent, expected);
}
虽然它看起来应该是完全正确的字符串我正在收到错误
字符串长度为149但是为154.字符串在索引86处有所不同
答案 0 :(得分:4)
如果删除最后一个换行符,该怎么办:
string line3 = "XXX,AAAAAA,B,CC;Dartw esata garle;3.00;1;1;1;2;0;1;ccc;";
我认为文本文件的结尾不是换行符。
答案 1 :(得分:2)
使用Environment.NewLine
代替\r\n
。
答案 2 :(得分:1)
你得到的信息是明确的:
Expected string length 149 but was 154. Strings differ at index 86
它指向\r\n
位置;因此,我怀疑您的文件包含\n
而不是\r
和\n
。
position 86: \r found |
v
...;1;1;1;2;0;1;l;XXX,AAAAAA,B,CC;Avboo;1.20;1;1;1;2;0;1;l;XXX,AAAAAA,B,CC;
所以你现在有3个额外的字符。
因为您的文本文件可能不会以\r\n
结尾,所以现在您还有一个额外的字符:
答案 3 :(得分:0)
line3
中有额外的NewLineChar ,以下代码正常运行:
[Test]
public void test()
{
string line1 = "XXX,AAAAAA,B,CC;Cont 123456;2.50;1;1;1;2;0;1;l;\r\n";
string line2 = "XXX,AAAAAA,B,CC;Avboo;1.20;1;1;1;2;0;1;l;\r\n";
string line3 = "XXX,AAAAAA,B,CC;Dartw esata garle;3.00;1;1;1;2;0;1;ccc;";
string expected = string.Concat(line1, line2, line3);
var fileContent = File.ReadAllText(@"C:\myFile.txt");
}
您还可以在myfile.txt
答案 4 :(得分:0)
另一种方法。
var actual = File.ReadAllLines(@"c:\abc.txt");
var expected = new List<string>();
expected.Add("line1");
expected.Add("line2");
expected.Add("line3");
Assert.AreEqual(expected, actual);
或者您可以在列表上执行for循环并逐个检查每一行。
答案 5 :(得分:0)
关于如何更好地进行测试,这里有很多好的答案。但实际上这个问题存在两个基本问题。
为此,我首先调试测试并复制File.ReadAllText("[filename]");
的输出然后将此输出粘贴到Assert.
方法中。
单元/集成测试的主要关键之一是确切地知道测试的两个方面 。如果没有这个,你可能不会打扰。
另外,你在测试什么?