我有一个简短的(Java)方法,其中包含几个执行一些非直观计算的参数。为这种方法编写单元测试以实现代码覆盖是微不足道的,但测试并未涵盖该方法的细微之处。我正在寻找一个测试框架或其他一些工具,它允许我根据我为参数定义的分区对此方法进行所有对(所有元组)测试。
例如,假设我有以下方法:
int foo(int begin, int end, int first, int last) {
...
}
我已经知道一些可能在外部强制执行的约束:
begin <= end
first <= last
我想根据我自己对参数的了解来定义明确的等价关系。例如:
begin == MIN
begin > MIN && begin < 0
begin == 0
begin == 1
begin > 1 && begin < MAX
begin == MAX
我还想定义涉及多个参数的等价关系。例如:
begin + 1 < end
begin + 1 == end
begin == end
begin == 0
要测试的组合是从每个等价关系(例如,从第一关系和第二关系)中选择等价类begin + 1 < end
,使得约束是可满足的。[顺便说一句,我意识到可满足性是 NP 完全的。我愿意接受它,给定包含一组相对较小的约束的组合。] 使用多个参数,组合的数量变得笨拙。为每个组合手动编写测试并找到满足结果约束集的参数是乏味且容易出错的。
我正在寻找一个可以自动测试每个组合的测试框架,或者一个可以为每个逻辑一致的组合生成测试的测试生成器(由你真正插入的不变检查)。这与CodePro等测试生成工具不同,后者从实际实现中生成测试用例。实际上,我想为方法的接口而不是它的实现生成测试。这不仅可以让我在方法实现 (TDD) 之前编写测试,而且可以确保即使在后来的修改之后也能对方法进行全面测试。
这样的工具是否存在,或者可以将某些东西拼凑在一起?或者也许我以错误的方式接近这个,你有另一个建议......