我对单元测试相当陌生,并且正在使用VS2010来开发和运行我的测试。我有一个简单的测试,如下图所示,它仅比较了2个System.Data.DataTableReader对象。我知道它们是相等的,因为它们都是使用相同的对象类型,相同的输入文件创建的,并且我已经验证了这些对象“看起来”相同。

我意识到我可能正在处理几个问题,一个是这是否是正确使用Assert.AreEqual甚至是测试这种情况的正确方法,另一个是我正在处理的主要问题,这就是为什么该测试由于以下异常而失败:

Failed 00:00:00.1000660 0 Assert.AreEqual failed.
Expected:<System.Data.DataTableReader>. Actual:<System.Data.DataTableReader>.


这是失败的单元测试代码:

public void EntriesTest()
{
    AuditLog target = new AuditLog();

    target.Init();

    DataSet ds = new DataSet();
    ds.ReadXml(TestContext.DataRow["AuditLogPath"].ToString());
    DataTableReader  expected = ds.Tables[0].CreateDataReader();
    DataTableReader actual = target.Entries.Tables[0].CreateDataReader();
    Assert.AreEqual<DataTableReader>(expected, actual);
}


任何帮助将不胜感激!

最佳答案

据我所知,DataTableReader不会覆盖Equals方法。因此,调用Equals将是引用相等性检查;两个单独的引用,相等失败。

您想要的是集合断言。呼叫CollectionAssert.AreEquivalent()。如果顺序很重要,请使用CollectionAssert.AreEqual()

09-11 11:28