所以我正在编写一个程序运行一些不同的测试。运行哪些测试取决于用户选择哪些UI元素。例如,在一个表单上,我有7个单选按钮和6个复选框。对于每一个变化,从2-5个不同的测试都会运行.用户可以选择任何组合(只有一个单选按钮除外)并为该选择运行测试。我确定要运行哪些测试的方法是非常多余的,我想知道是否有一种更清晰的方法。下面是一个示例:
if(radiobutton1.checked)
{
if(checkbox1.checked)
{
runtest1(param a, param b);
runtest2(param b, param f);
}
if(checkbox2.checked)
{
runtest1(param f, param n);
runtest2(param c, param l);
runtest3(param f, param d);
}
}
else if(radiobutton2.checked)
//and so on...
所以我有42个用例,我正在为每个用例运行2-5个子测试。有更好的方法吗?
发布于 2018-07-18 23:51:17
你可以从相反的方向处理问题。
创建带有两个函数的类型,一个用于运行测试,另一个用于检查需要运行的测试。
public class Test
{
public Action Run { get; set; }
public Func<bool> CanRun { get; set; }
}
然后,您只需使用它们自己的谓词定义所有测试。
var test1 = new Test
{
Run = () => runtest1(param a, param b),
CanRun = () => radiobutton1.checked && checkbox1.checked
};
var test2 = new Test
{
Run = () => runtest2(param b, param f),
CanRun = () => radiobutton1.checked && checkbox1.checked
};
var test3 = new Test
{
Run = () => runtest1(param f, param n),
CanRun = () => radiobutton1.checked && checkbox2.checked
};
var test4 = new Test
{
Run = () => runtest2(param c, param l),
CanRun = () => radiobutton1.checked && checkbox2.checked
}
// Then tests execution will looks much simplier
var testsToRun =
new[] { test1, test2, test3, test4 }.Where(test => test.CanRun());
foreach (var test in testsToRun)
{
test.Run();
}
在添加或删除测试时,当您不需要接触与其他测试相关的代码时,上面的方法应该使维护变得更容易,因为每个测试都是与其他测试隔离的。
https://softwareengineering.stackexchange.com/questions/375447
复制相似问题