我有一个测试设置,我需要运行许多非常相似的单元测试。例如,在目标环境中需要检查大约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);
}
所以我正在寻找建立一组单元测试的建议,这些单元测试包含一个配置对象但不需要我生成许多TestMethods。这看起来可能需要代码生成,但我想在没有它的情况下解决它。
答案 0 :(得分:0)
您可以使用数据驱动测试吗? http://msdn.microsoft.com/en-us/library/ms182519(VS.80).aspx
然后,您可以排除先前传递的行...
答案 1 :(得分:0)
我的解决方案是将所有测试放在他们自己的程序集中,用属性装饰它们然后通过程序集反映执行测试。比数据驱动的测试更有意义。