测试返回集合的方法的单元测试

3
我正在为一个返回复杂对象集合(例如IQueriable<MyObject>)的服务编写单元测试,但我不知道该如何解决这个问题。
假设有这样一个方法: public IQueriable<MyObject> GetMyObjects(int someParameterA, int someParameterB){...} 基本上,这是一个根据传递的参数输出一组相当复杂的对象的方法。
由于应用程序正在开发中,因此我可以使用本地SQL实例,并创建了一个方法来使用一些示例数据填充此数据库,以便服务有东西可以使用。
我没有太多编写单元测试的经验。好吧,说实话,我没有任何编写单元测试的经验。大多数我看到的示例都是针对执行某些计算并返回单个结果的方法。因此,可以通过测试用例附加数据源进行测试。如果一个方法要返回两个数字的总和,则数据源将包含三列:两个数字和预期的结果。
因此,凭借我的有限单元测试知识,我尝试运用相同的逻辑来测试返回集合的方法,但我不知道测试应该包括什么(我知道可以轻松地测试返回的元素数量),更不用说测试用例的数据源应该长成什么样子。
我知道VS2010具有CollectionAssert,但我想我的问题在于我不知道如何在这种情况下创建“预期”值。
那么,应该如何最好地为此类方法编写单元测试呢?
1个回答

3
创建一个数据源的模拟集合。可以创建完整的对象,或者如果在测试中创建它们很复杂,则可以考虑使用模拟框架,例如MoqRhino Mocks
只要您的数据源包含足够范围的对象来涵盖正面、负面和异常情况,那么您就可以编写一套针对此数据源的测试,以涵盖可能在GetMyObjects中出现的不同输入状态的所有预期结果。
您希望此数据与应用程序运行时相同,因此即使您没有通常所需的全部数据,也必须有足够的数据来涵盖您想要测试的各种情况,例如:
- 当源中没有数据时会发生什么。 - 我们会得到一个空集合还是异常? - 当源中有数据但不匹配您传递的参数时会发生什么? - 当源中有数据但只有一个参数匹配时会发生什么? - 当源中有数据并且您传递应返回数据的参数时会发生什么? - 当将错误数据传递给该方法时会发生什么? - 等等....

非常抱歉回复晚了。我已经编辑了我的问题。我可以轻松地重新创建服务使用的数据库,以返回集合,因为整个过程仍在开发中(尽管我猜这可能不是最好的解决方案...但目前这是我得到的最好的)。我的问题在于测试用例中使用的数据源。我希望现在我的问题更清楚了。 - MBender

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接