Assert.AreEqual(...)给了我一个System.FormatException

时间:2011-10-10 16:15:09

标签: c# unit-testing assert formatexception

Assert.AreEqual(expected, actual, "The value returned for {0}'s Foo method should be 'Bar'.",
            typeof(Calculator));

Assert.AreEqual(expected, actual, "The value returned for {0}'s Foo method should be 'Bar'.",
            typeof(Calculator).Name);

这两行都抛出:

测试方法MyTesting.FooTest抛出异常: System.FormatException:输入字符串的格式不正确。


  

System.Text.StringBuilder.AppendFormat(IFormatProvider提供程序,   字符串格式,Object [] args)
  System.String.Format(的IFormatProvider   provider,String format,Object [] args)
  MyTesting.FooTest()in   C:\ TFS \ Scratchpad \ MyLibrary \ Unit Testing \ FooTest.cs:第195行

奇怪的是,如果我的单元测试失败,我只会得到一个异常,当它通过时我没有得到这个异常。我不期待一个例外,相反它应该因为断言而失败,而不是因为单元测试本身引发了异常。

2 个答案:

答案 0 :(得分:1)

进行测试以确保在相等测试之前对象Calculator不为null。

在这种特殊情况下会以字符串格式发生此类错误。

答案 1 :(得分:0)

尝试不使用格式化字符串,看看它是否仍然失败。我今天遇到了同样的问题,尝试在结构上执行断言,并且这样做会阻止我的断言抛出格式异常。它似乎有格式化字符串的问题。 (我正在使用ms测试)

Assert.AreEqual(expected, actual,"The value returned for " + typeof (Calculator) + "'s Foo method should be 'Bar'.");
Assert.AreEqual(expected, actual, "The value returned for " + typeof(Calculator) + "'s Foo method should be 'Bar'.");

我不喜欢像这样构建字符串,但这是我能让我的测试正常运行的唯一方法。