Unit testing 构建和运行许多类似的单元测试的好技术是什么?

Unit testing 构建和运行许多类似的单元测试的好技术是什么?,unit-testing,tfs,Unit Testing,Tfs,我有一个测试设置,其中有许多非常相似的单元测试需要运行。例如,大约有40个存储过程需要检查是否存在于目标环境中。但是,我希望所有测试都按其业务单元分组。因此,在40个不同的类中会有40个非常相似的TestMethod实例。有点跛脚。还有一件事:每组测试都需要有自己的解决方案。因此,业务单元A将有一个名为Tests.BusinessUnitA的解决方案 我想,我可以通过将一个名为要检查的存储过程的配置对象传递给TestRunner类来设置这一切 问题是我正在失去单元测试的原子性。我不能只运行其中一

我有一个测试设置,其中有许多非常相似的单元测试需要运行。例如,大约有40个存储过程需要检查是否存在于目标环境中。但是,我希望所有测试都按其业务单元分组。因此,在40个不同的类中会有40个非常相似的TestMethod实例。有点跛脚。还有一件事:每组测试都需要有自己的解决方案。因此,业务单元A将有一个名为Tests.BusinessUnitA的解决方案

我想,我可以通过将一个名为要检查的存储过程的配置对象传递给TestRunner类来设置这一切

问题是我正在失去单元测试的原子性。我不能只运行其中一个测试,我必须运行TestRunner类中的所有测试

这就是代码此时的样子。当然,它很好而且紧凑,但是如果测试8失败,我就没有办法只运行测试8

  TestRunner runner = new TestRunner(config, this.TestContext);

  var runnerType = typeof(TestRunner);
  var methods = runnerType.GetMethods()
     .Where(x => 
       x.GetCustomAttributes(typeof(TestMethodAttribute), false)
       .Count() > 0).ToArray();

      foreach (var method in methods)
      {
       method.Invoke(runner, null);
      }

因此,我正在寻找一些建议,来进行一组单元测试,这些单元测试接受一个配置对象,但不需要我生成许多测试方法。这看起来可能需要生成代码,但我想在不生成代码的情况下解决它

您可以使用数据驱动测试吗?


然后可以排除以前传递的行…

我的解决方案是将所有测试放在它们自己的程序集中,用属性装饰它们,然后通过程序集反射以执行测试。比数据驱动测试更有意义

我不知道,看起来和我现在做的不一样。我基本上需要运行相同的测试,但需要在许多项目中共享它。所以数据驱动的测试是类似的,除了我正在做的项目交叉的事情。数据驱动的测试将是一种方式。他们在MSTest中有点笨重,但他们应该仍然能够完成这项工作。要传递到测试的数据将是您正在检查的存储过程的名称。显然,如果要在多个测试程序集中拆分数据驱动的测试,您将需要多个数据驱动的测试-我希望创建一个通用方法,每个测试程序集调用该方法以保持代码干燥。