Testing 如何根据逻辑表达式生成测试数据?

Testing 如何根据逻辑表达式生成测试数据?,testing,automated-tests,data-generation,Testing,Automated Tests,Data Generation,作为主题,我想生成测试数据,以涵盖某些逻辑表达式的所有可能条件,如下所示: ((a==3000710)||(b==3000700)) &&(b>=30 && b<=33) &&((c==1)||(c>=4 && c<=6)) &&((v==1.0.9)||(v==2.0.0)) ((a==3000710)| |(b==3000700)) &&(b>=30&&b=4&&c我

作为主题,我想生成测试数据,以涵盖某些逻辑表达式的所有可能条件,如下所示:

 ((a==3000710)||(b==3000700))
   &&(b>=30 && b<=33)
   &&((c==1)||(c>=4 && c<=6))
   &&((v==1.0.9)||(v==2.0.0))
((a==3000710)| |(b==3000700))

&&(b>=30&&b=4&&c我必须说的第一件事——重构它! 将其分解为几个if语句,这些语句更易于验证、反转逻辑和提前退出。在不查看实际代码和上下文的情况下,很难给出更详细的建议


另一件事,如果
(b==3000700)
,那么
&&(b>=30&&By您应该指定使用的技术,这样其他人可能会向您指出相关资源。您使用的是什么编程语言和测试框架?实际上我不关心语言,只是想找到一个可行的方法(算法)或者用开源工具来解决这个问题。你好@buxter,非常感谢你详细的回答。关于(a==300700)的值,你是对的,确实是打字错误。你的方法是可行的。我认为我们可以进一步使用一些技术,如“程序静态分析”,自动生成所有关键值,但我不熟悉这些字段,你能解释一下这一点吗?再次感谢。这是C#中的一个单元测试,使用Nunit框架。它有一个内置属性[组合]对于参数化测试。因此,当测试运行时,它会收集所有输入数据并生成所有可能的变量。在给定的示例中,它会在临界点上创建所有可能的变量。其他单元测试框架可能有类似的内容。希望它能回答您的问题
[30, 33] => 30, 31, 33 (The value outside of this range is already covered by "any other")
[4, 6] => 4, 5, 6 (The value outside of this range is already covered by "any other". Though we did't really change anything in this case)
        [Test, Combinatorial]        
        public void FirstTest(
            [Values(3000710, 0)] int a, 
            [Values(30, 31, 33, 3000700, 0)] int b,
            [Values(1, 4, 5, 6, 0)] int c, 
            [Values("1.0.9", "2.0.0", "")] string v)
        {
            RunTestMethod(a, b, c, v);
        }