来自"相同"的不同断言结果串

时间:2017-04-13 10:27:03

标签: c# .net unit-testing

我正在尝试读取文件并断言一些.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中创建一个临时字符串,然后在那个上断言。结果相同。

提前致谢!

2 个答案:

答案 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 + "."