单元测试返回集合的方法

时间:2012-10-05 10:42:55

标签: c# visual-studio-2010 unit-testing

我正在尝试为一个返回复杂对象集合的服务编写一些单元测试(IQueriable<MyObject>以提供一个想法),我不知道如何处理这个问题。

考虑一下:

public IQueriable<MyObject> GetMyObjects(int someParameterA, int someParameterB) {...}

基本上,一种方法,根据传递的参数,将输出相当复杂的对象的集合。

由于应用程序正在开发中,我可以使用本地SQL实例,并且我已经创建了一个方法,该方法将使用一些示例数据填充此DB,因此该服务可以使用。

我在编写单元测试方面没有多少经验。好吧,老实说,我没有任何编写单元测试的经验。 -_-我看到的大多数例子都是用于进行一些计算并返回单个结果的方法。因此,可以使用测试用例附加测试的数据源。如果方法是返回两个数字的总和,则数据源将包含三列:两个数字和预期结果。

所以,由于我对单元测试的知识有限,我试图运用相同的逻辑来测试一个返回集合的方法......我不知道测试应该包含什么(我知道我可以容易测试返回元素的数量),更不用说测试用例的测试数据来源了。

我知道VS2010有CollectionAssert,但我想我的问题是我不知道在这种情况下如何创建“预期”值。

对这些方法进行单元测试的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

为数据源创建模拟集合。要么是完整的对象,要么在测试中创建它们很复杂,那么可能会考虑使用模拟框架,例如MoqRhino Mocks

只要您的数据源包含足够范围的对象来覆盖正面,负面和异常情况,那么您可以针对此数据源编写一套测试,以涵盖{{}中可能出现的不同输入状态的所有预期结果。 {1}}。

您希望这些数据与应用程序运行时的数据一样,所以即使您没有正常的所有数据,您也必须拥有足够的数据来覆盖您的可能性想要测试,例如:

  • 当源中没有数据时会发生什么。
    • 我们得到一个空集合,还是一个例外?
  • 当源中有数据但与您传入的参数不匹配时会发生什么?
  • 当源中存在数据时会发生什么,但只有一个参数匹配
  • 当源中存在数据并传入应返回数据的参数
  • 时会发生什么
  • 将错误数据传递给方法时会发生什么?
  • 等...