2012-10-25 30 views
2

我是使用mstest框架編寫單元測試用例的新手,我被困在從xml文件中檢索新行字符以作爲期望值的輸入。下面是一塊測試方法從xml文件中檢索時,不保留換行符。我已經使用cdata

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會添加額外的斜槓。 請讓我知道,我該如何聲明這個價值。謝謝!

回答

2

您的XML文件不包含換行符。它包含一個反斜槓,後跟t,rn。這個組合是忠實地從XML文件中讀取的,然後當調試器顯示給你時,它將轉義反斜槓。

如果要將「C#字符串轉義」規則應用於從XML中讀取的值,您可以這樣做,但您應該知道您需要需要才能這樣做。一個簡單的方法是:

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

存在這樣的情況,會做錯誤的事情 - 例如,如果你已經有了一個真正反斜線後跟一個t。儘管如此,它可能已經足夠了。如果不是,你將不得不寫一個「正確」的替代品,從一開始就讀取字符串並處理各種情況。

+0

你能幫我在這種情況下如何斷言。那挺棒的! – vasujc

+0

@vasujc:一旦你獲得了*正確的*期望值,你就可以像正常一樣斷言。 –

+0

非常感謝您的投入!它確實幫助我解決了我的問題。我也會跟蹤 – vasujc

相關問題