在JUnit(或任何其他测试框架)中是否有任何方法可以对方法的所有可能输入进行断言?
类似的东西:
assertTrue(myClass.myMethod(anyString))
编辑:
我意识到有无数可能的输入,但我想我想知道是否有一些框架可以静态分析方法并检测在所有可能的情况下将达到某个结果。例如。 public static boolean myMethod(String input) { return true; }
将永远返回true?
答案 0 :(得分:1)
不,实际上有无限数量的可能输入 您的工作是将它们分成具有(预期)等效行为的测试用例。 如果存在这样的人工智能,那么它也可以编写要测试的代码。
存在自动创建测试用例的测试用例生成器,但它们大多无用。它们产生了大量的测试用例,主要只是触摸代码,而不是测试预期的结果。
这些工具提高了测试覆盖率,但是以一种非常可疑的方式。 (我会称这是非法提高测试覆盖率:你应该测试,而不是触摸!)
此类工具来自Google CodePro。使用CodePro->测试用例生成(例如在Eclipse中) 首先,你会有点惊讶,尝试它并不坏。然后你就会知道自动测试用例生成的局限性。
答案 1 :(得分:0)
你不能用JUnit做到这一点。我认为你能做到这一点的唯一方法就是使用Formal Logic Verification
答案 2 :(得分:0)
如前所述,这是不可能的。但是,有基于自动化属性的测试方法。这在某种程度上与您的想法尽可能接近。好吧,还是很艰难......
例如,看看scalacheck:
ScalaCheck是一个用Scala编写的库,用于自动化 基于属性的Scala或Java程序测试。 ScalaCheck是 最初的灵感来自Haskell库QuickCheck,但也有 冒险进入自己。