将返回的DataTable对象的行转换为有用的列表?

时间:2009-06-23 12:58:59

标签: asp.net sql vb.net unit-testing

我目前正在为一个接近完成的应用程序编写单元测试(在管理层查看它并将其内部转出之前)。我正在测试业务层,并且设置一个方法来返回所有“GroupID”的数据表,这些数据表只是一个整数来表示用户所属的组。

我假设在此单元测试上断言的最佳方法是断言从受控测试数据库返回正确的groupID。但是,我不确定如何在数据表上断言。是完成此操作的唯一(也是最好)方法,只需循环遍历数据表,直到它为空并将每个值添加到整数数组中?如何在此测试中断言?

2 个答案:

答案 0 :(得分:0)

这取决于业务层中的方法如何获取数据。如果它直接来自数据库,那么您没有多少选择而不是使用测试数据库。不过,这不符合单元测试的精神。

理想情况下,业务层方法将从数据提供程序获取数据,您可以在运行时使用IoC(例如Castle Windsor)或类似Rhino Mocks的模拟框架进行交换。

无论哪种方式,您基本上都需要设置测试,并将方法的返回值与期望值进行比较。无论您使用数据库还是模拟对象都不会影响此方法,因此检查数组的内容和顺序与硬编码的已知值是完全可以接受的。

答案 1 :(得分:0)

完成使用集合的最佳方式......

List<string> items = new List<string>(dtbl.Rows.Count);

    for (int RowCount = 0; RowCount < dtbl.Rows.Count; RowCount++)
    {
        items.Add(dtbl.Rows[RowCount]["ID"].ToString());
    }

    items.ToArray();