我在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 \r
与#0 P1 T1000
进行比较< - 我无法正确格式化。最后应该有一个回车。
有没有办法在回车符到位的情况下从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
最后都有回车符。
答案 0 :(得分:0)
删除&#34; \ r&#34;从csv文件中的行和更改
String expected = TestContext.DataRow["expected"].ToString();
到
String expected = TestContext.DataRow["expected"].ToString() +
new String(new[] { (char)0x0D });