【问题标题】:Unit testing a method that returns a collection对返回集合的方法进行单元测试
【发布时间】:2012-10-05 10:42:54
【问题描述】:

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

考虑一下:

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

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

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

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

因此,由于我对单元测试的了解有限,我正在尝试应用相同的逻辑来测试返回集合的方法......我不知道测试应该包含什么(我知道我可以轻松测试返回元素的数量),更不用说带有测试用例的测试数据源应该是什么样子了。

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

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

【问题讨论】:

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


    【解决方案1】:

    为数据源创建一个模拟集合。成熟的对象,或者如果它们在测试中创建起来很复杂,那么可以考虑使用模拟框架,例如 MoqRhino Mocks

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

    您希望这些数据与应用程序运行时一样,因此即使您没有正常情况下拥有的所有数据,您也必须有足够的数据来应对可能发生的情况想测试一下,比如:

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

    【讨论】:

    • 对迟到的反应表示诚挚的歉意。我已经编辑了我的问题。我可以轻松地重新创建服务用于返回集合的数据库,因为整个事情仍在开发中(尽管我想这可能不是最好的解决方案......但在这一点上它是我得到的最好的)。我的问题在于测试用例使用的数据源。我希望我的问题现在更清楚了。
    猜你喜欢
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    相关资源
    最近更新 更多