2

我是使用 mstest 框架编写单元测试用例的新手,我被困在从 xml 文件中检索换行符作为预期值的输入。下面是一段测试方法

public void ExtractNewLineTest()

{
    MathLibraray target = new MathLibraray(); // TODO: Initialize to an appropriate value
    string expected = TestContext.DataRow["ExpectedValue"].ToString(); => I am retrieving the value from the xml file.
    string actual;
    actual = target.ExtractNewLine();
    Assert.AreEqual(expected, actual);
}

下面是xml内容

<ExtractNewLineTest>
      <ExpectedValue><![CDATA[select distinct\tCDBREGNO,\r\n\tMOLWEIGHT,\r\n\tMDLNUMBER\r\nfrom Mol]]></ExpectedValue>
 </ExtractNewLineTest>

当我从 xml 检索数据到预期值时,我得到低于字符串

ExpectedValue = “select distinct\\tCDBREGNO,\\r\\n\\tMOLWEIGHT,\\r\\n\\tMDLNUMBER\\r\\nfrom Mol”;

如果我们看到上面的值,就会为 \n 和 \r 添加额外的斜线。请让我知道,我如何断言这个值。谢谢!

4

1 回答 1

2

您的 XML 文件不包含换行符。它包含一个反斜杠,后跟一个t,rn。该组合是忠实地从 XML 文件中读取的,然后调试器在向您显示它时会转义反斜杠。

如果您想对从 XML 读取的值应用“C# 字符串转义”规则,您可以这样做,但您应该知道您确实要这样做。一个简单的方法是:

expectedValue = expectedValue.Replace("\\t", "\t")
                             .Replace("\\n", "\n")
                             .Replace("\\r", "\r")
                             .Replace("\\\\", "\\");

在某些情况下,这会做错事——例如,如果你有一个真正的反斜杠,后跟一个t. 不过,这对您来说可能已经足够了。如果没有,您将不得不编写一个“正确的”替换,它从一开始就读取字符串并处理各种情况。

于 2012-10-25T12:29:47.180 回答