我在C#中有一個數據驅動的測試,驗證函數是否正確地創建一個給定輸入的字符串。被測將回車符字符串轉換爲回車
代碼:
public static class Formatter
{
public static String FormatWithCarriageReturn(int position)
{
return String.Format("#0 P{0} T1000 \r", position);
}
}
FormatWithCarriageReturn
的必須返回與所附回車的字符串。
爲了測試此方法,我在MSTest中創建了一個數據驅動的測試,該測試從CSV文件加載數據。
CSV文件:
position, expected
1, #0 P1 T1000 \r
2, #0 P2 T1000 \r
3, #0 P3 T1000 \r
4, #0 P4 T1000 \r
5, #0 P5 T1000 \r
6, #0 P6 T1000 \r
測試方法:
/* Test method and data source attributes*/
public void FormattingWithCarriageReturnFormatsCorrectly()
{
String expected = TestContext.DataRow["expected"].ToString();
/* various setup code. */
int requestedPosition = Convert.ToInt32(TestContext.DataRow["position"]);
String actual = Formatter.FormatWithCarriageReturn(requestedPosition);
Assert.AreEqual(expected, actual);
}
的問題是TestContext.DataRow["expected"].ToString()
聲明將加載字符串字面#0 P1 T1000 \\r
,而Assert
,因爲它與#0 P1 T1000
<比較#0 P1 T1000 \r
失敗 - 我無法得到這個格式正確。最後應該有回車。
有沒有一種方法來獲得預期的字符串從CSV文件回車的地方?我可以在CSV文件中列出預期的字符串爲#0 P1 T1000
,然後執行類似expected = String.Concat(expected, " \r");
的操作,但是我想將完整的預期字符串保留在CSV文件中。
編輯:下面是我得到的當前斷言消息:
Result1 Message: Assert.AreEqual failed. Expected:<#0 P1 T1000 \r>. Actual:<#0 P1 T1000
>.
的交接消息將爲
Result1 Message: Assert.AreEqual passed. Expected:<#0 P1 T1000
>. Actual:<#0 P1 T1000
>.
注意兩個expected
和actual
在結尾處回車。
'返回的String.Format( 「#0 P {0} T1000 \ R」 ,position;'是一個錯字......你錯過了一個結尾')'如果你在這個返回String.Format(@「#0 P {0} T1000 \ r 「,position);' – MethodMan
測試數據根本不包含回車符。它以*兩個*字符結尾,一個反斜槓和一個r。區分字符串字符串中的轉義序列。如果你想要一個匹配,那麼你需要'expected = expected.Replace(「\\ r」,「\ r」); –