将回车符字符串转换为回车
问题描述:
我在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
在结尾处回车。
答
删除从csv文件行中的 “\ r” 和改变
String expected = TestContext.DataRow["expected"].ToString();
到
String expected = TestContext.DataRow["expected"].ToString() +
new String(new[] { (char)0x0D });
'返回的String.Format( “#0 P {0} T1000 \ R” ,position;'是一个错字......你错过了一个结尾')'如果你在这个返回String.Format(@“#0 P {0} T1000 \ r “,position);' – MethodMan
测试数据根本不包含回车符。它以*两个*字符结尾,一个反斜杠和一个r。区分字符串字符串中的转义序列。如果你想要一个匹配,那么你需要'expected = expected.Replace(“\\ r”,“\ r”); –