Unit testing 单元测试-如何在存根数据库数据时设置测试数据

Unit testing 单元测试-如何在存根数据库数据时设置测试数据,unit-testing,mstest,stub,stub-data-generation,Unit Testing,Mstest,Stub,Stub Data Generation,在我们的单元测试中,我有一个存根对象,它在内存中创建一组数据,在单元测试期间使用,以便不使用实时数据库 我有一些单元测试,它们使用测试中的查询和测试中提供给查询的值来检查从这个集合返回的行数。我的第一个问题是,因为我们使用的是MSTest,它不支持参数化测试,所以我们对每一组不同的值都有一个测试,并且最终进行了许多测试,只是提供给一个例程的值不同。使用不同的测试框架在政治上可能很困难 此外,处理数据也有点笨拙,因为它是通过代码向集合中添加实体创建的,因此很难轻松查看集合中的数据,如果我们决定将来

在我们的单元测试中,我有一个存根对象,它在内存中创建一组数据,在单元测试期间使用,以便不使用实时数据库

我有一些单元测试,它们使用测试中的查询和测试中提供给查询的值来检查从这个集合返回的行数。我的第一个问题是,因为我们使用的是MSTest,它不支持参数化测试,所以我们对每一组不同的值都有一个测试,并且最终进行了许多测试,只是提供给一个例程的值不同。使用不同的测试框架在政治上可能很困难

此外,处理数据也有点笨拙,因为它是通过代码向集合中添加实体创建的,因此很难轻松查看集合中的数据,如果我们决定将来向集合中添加记录,我们需要更新测试中应该返回的记录数,以便我们的测试非常紧密地依赖于这些数据。似乎没有办法实现自动化。是这样吗

  • 既然您已经排除了使用另一个单元测试框架的可能性,那么就编写自己的参数化测试吧。编写一个在不同数据集之间循环的测试,使用不同的参数调用私有助手方法。将每个数据集运行的结果收集到“收集参数”。我建议您只记录错误/失败的数据集,以减少噪音。在循环结束时,如果收集参数不是空的,则发出等效的Assert.Fail并将结果记录到控制台。(缺点是在GUI中看不到单独的测试,如果组织正在监视测试的数量,那么所有这些工作只能得到+1。)
  • 这使您能够按照自己的意愿专门处理故障消息—您可以在故障跟踪中包含基本位。这将帮助您“快速看到”哪个场景失败

  • 看看VisualStudio2010Ultimate版是如何为数据库测试做到这一点的(您可以下载一个完全配置的VPC)

    一个选项是将“上下文”添加到测试中,以便在初始化测试时,使用测试所需的参数初始化上下文。您可以通过测试方法中的代码访问参数,也可以将其动态分配给要测试的代码(可能不是最佳选项)

    此外,您还可以添加测试应遵守的预期结果或更好的条件。这些条件可以从某种数据源(如数据库)初始化并添加为数据集。创建一种方法,用于评估测试方法的条件


    考虑构建特定的类来处理不同的上下文设置或条件,并创建一个基本测试类(它添加了功能),您的测试类可以从中继承。

    +1。一定要尝试运行自己的数据驱动测试类;在获得NUnit2.5之前,我们做了类似的事情。它运行得很好:)