2012-10-05 41 views
3

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

考虑一下:

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

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

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

我没有太多编写单元测试的经验。好的,我会说实话,我没有编写单元测试的经验。我看到的大多数例子都是用来做一些计算并返回一个结果的方法。因此可以将测试数据源附加到测试用例。如果一种方法要返回两个数字的总和,那么数据源将由三列组成:两个数字和预期结果。因此,凭借我对单元测试的有限知识,我试图应用相同的逻辑来测试返回集合的方法......并且我不知道测试应该由什么组成(我知道我可以轻松测试返回元素的数量),更不用说测试用例的测试数据源应该是什么样子了。

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

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

回答

3

为数据源创建模拟集合。要么是成熟的对象,要么是在测试中创建的复杂对象,然后查看使用模拟框架,例如MoqRhino Mocks

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

您希望此数据与应用程序运行时的数据保持一致,因此即使您没有正常使用的所有数据,您也只需拥有足够的内容即可覆盖事件你想测试,如:

  • 当源中没有数据时会发生什么。
    • 我们是否收到空集或异常?
  • 当有源数据会发生什么,但不符合您在
  • 当有源数据会发生什么情况传递参数,可以但只有PARAMS比赛
  • 会发生什么事之一源代码中有数据,并且您传递的参数应返回数据
  • 将错误数据传递给方法时会发生什么?
  • 等....
+0

对于后期反应的真诚道歉。我编辑了我的问题。我可以轻松地重新创建服务使用的数据库来返回集合,因为整个事件仍在开发中(虽然我猜这可能不是最好的解决方案......但在这一点上,这是我得到的最好的解决方案)。我的问题是与测试用例一起使用的数据源。我希望我的问题现在更清楚。 – Shaamaan