我正在尝试读取文件并断言一些.Contains以确保将正确的数据写入文件。我需要断言5行,并认为用for循环运行它们会很聪明。但令人遗憾的是,for-loop中的断言产生的结果与5个硬编码断言不同。代码如下:
string writtenFile = File.ReadAllText(completeFilePathWithNameAndExtension);
Assert.IsTrue(writtenFile.Contains("2000-04-09 08:13:15:015 Test: 1."));
Assert.IsTrue(writtenFile.Contains("2000-04-09 08:13:15:030 Test: 2."));
Assert.IsTrue(writtenFile.Contains("2000-04-09 08:13:15:045 Test: 3."));
Assert.IsTrue(writtenFile.Contains("2000-04-09 08:13:15:060 Test: 4."));
for (int i = 1; i <= 4; i++)
{
Assert.IsTrue(writtenFile.Contains(
"2000-04-09 08:13:15:0" + i*15 + " Test: " + i + "."));
}
Value of writtenFile: "Timestamp \tData \t\r\n2000-04-09 08:13:15:000\tTest: 0. \t\r\n2000-04-09 08:13:15:015\tTest: 1. \t\r\n2000-04-09 08:13:15:030\tTest: 2. \t\r\n2000-04-09 08:13:15:045\tTest: 3. \t\r\n2000-04-09 08:13:15:060\tTest: 4. \t\r\n"
我已经做了很多实验,字符串似乎在任何方面都是相同的。我也尝试将它作为UTF-16字符的字符串,但也没有用。另外,我试着在for-loop中创建一个临时字符串,然后在那个上断言。结果相同。
提前致谢!
答案 0 :(得分:1)
好的我把字符串更改为(&#34; 2000-04-09 08:13:15:0 {0} \ tTest:{1}。&#34;,k * 15,k)(添加了在{0}和Test之间的\ t使它工作,遗憾的是我仍然不知道为什么硬编码断言在没有\ t的情况下工作。
答案 1 :(得分:1)
正如您在示例中看到的那样使用4行:
Assert.IsTrue(writtenFile.Contains("2000-04-09 08:13:15:060 Test: 4."));
现在你正在循环中:
Assert.IsTrue(writtenFile.Contains("2000-04-09 08:13:15:0" + i * 15 + " Test: " + i + "."));
这应该会给你一个提示,让我们说10 * 15 == 150
,这样字符串结果就是"2000-04-09 08:13:15:0150\tTest: 10."
而不是"2000-04-09 08:13:15:150\tTest: 10."
。
您应该使用的是"2000-04-09 08:13:15:" + ( i * 15 ).ToString("D3") + "\tTest: " + i + "."
。