使用IEnumerable返回类型进行单元测试

时间:2011-08-17 12:30:19

标签: asp.net unit-testing

我已经在岩石下生活了好几年,但最后我不得不看一下单元测试。

我正在尝试对返回IEnumerable的存储库进行单元测试

[TestMethod()]
    public void GetContactsTest()
    {
        string sqlStr = Settings1.Default["TestSqlString"].ToString();
        ContactRepository target = new ContactRepository(sqlStr);

        IEnumerable<Contact> expected = new IEnumerable<Contact>();
        IEnumerable<Contact> actual;
        actual = target.GetContacts();

        Assert.AreEqual(expected, actual);

    }

但是,不可能为IEnumerable创建一个预期对象的实例。

任何人都可以指导一下这个菜鸟:)

1 个答案:

答案 0 :(得分:2)

您无法直接创建接口实例,您需要一个实现该接口的类。数组可以很好地完成,所以你可以做到

IEnumerable<Contact> expected = new Contact[] {};

但是,你也会发现Assert.AreEqual在这里没有做你想做的事。它将测试两个对象是否相等,这与测试它们是否产生相同的序列是不同的。例如,一个空的联系数组和一个空列表&lt; Contact&gt;不等于对象,但它们代表相同(空)的序列。您可以使用

测试序列是否相等
Assert.IsTrue(expected.SequenceEqual(actual));