将回车符字符串转换为回车

将回车符字符串转换为回车

问题描述:

我在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 
>. 

注意两个expectedactual在结尾处回车。

+0

'返回的String.Format( “#0 P {0} T1000 \ R” ,position;'是一个错字......你错过了一个结尾')'如果你在这个返回String.Format(@“#0 P {0} T1000 \ r “,position);' – MethodMan

+1

测试数据根本不包含回车符。它以*两个*字符结尾,一个反斜杠和一个r。区分字符串字符串中的转义序列。如果你想要一个匹配,那么你需要'expected = expected.Replace(“\\ r”,“\ r”); –

删除从csv文件行中的 “\ r” 和改变

String expected = TestContext.DataRow["expected"].ToString(); 

String expected = TestContext.DataRow["expected"].ToString() + 
    new String(new[] { (char)0x0D }); 
+0

直接从问题:“我可以在CSV文件中列出所需的字符串作为#0 P1 T1000,然后执行类似expected = String.Concat(预计,”\ r“);, **但我想在CSV文件中保留完整的预期字符串。**“ – CHendrix

+1

不是回车0x0D? –

+0

我在他的最终编辑期间输入了这个内容 - 我没有看到他指定他想保留csv中的cr。 – Kevin