首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为所有对测试生成测试

问为所有对测试生成测试
EN

Stack Overflow用户
提问于 2012-05-29 17:57:52
回答 5查看 3.5K关注 0票数 2

我有一个简短的(Java)方法,它有几个参数,可以执行一些非直观的计算。为该方法编写单元测试以实现代码覆盖率是微不足道的,但测试并不涵盖该方法的微妙之处。我正在寻找一个测试框架或其他一些工具,它们将允许我基于我为参数定义的分区对此方法进行所有对(所有元组)测试。

例如,假设我有以下方法:

代码语言:javascript
复制
int foo(int begin, int end, int first, int last) {
    ...
}

我已经知道一些约束,这些约束可能是外部强制的:

代码语言:javascript
复制
begin <= end
first <= last

我想基于我自己对参数的了解来定义显式的等价关系。例如:

代码语言:javascript
复制
begin == MIN
begin > MIN && begin < 0
begin == 0
begin == 1
begin > 1 && begin < MAX
begin == MAX

我还想定义涉及多个参数的等价关系。例如:

代码语言:javascript
复制
begin + 1 < end
begin + 1 == end
begin == end

要测试的组合是从每个等价关系(例如,来自第一关系的begin == 0和来自第二关系的begin + 1 < end )中选择等价类,使得约束是可满足的。顺便说一句,我意识到可满足性是NP完全的。考虑到包含相对较小的约束集的组合,我愿意接受它。有了几个参数,组合的数量就变得很难用了。手动为每种组合编写一个测试,并找到满足结果约束集的参数是乏味的,而且容易出错。

我正在寻找一个测试框架,可以自动测试每个组合,或者一个测试生成器,可以为每个逻辑上一致的组合生成测试(不变检查由您真正插入)。这与CodePro等测试生成工具不同,测试生成工具从实际实现生成测试用例。实际上,我希望为方法的接口生成测试,而不是为其实现生成测试。这不仅允许我在方法实现(TDD)之前编写测试,而且还可以确保方法即使在后来的修改之后也能得到全面的测试。

这样的工具是否存在,或者可以将某些东西拼凑在一起?或者我用错了方法,而你有另一个建议...

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-05-29 21:45:43

有关这方面的一些想法,请参阅David Saff's work on Theory Testing。

票数 2
EN

Stack Overflow用户

发布于 2012-05-29 18:33:24

简单的嵌套循环(每次循环迭代都会调用一个测试方法)难道不符合要求(至少在很大程度上符合要求)吗?

类似于:

代码语言:javascript
复制
int[] ends = new int[] {-50, -10, -1, 0, 1, 50, MIN, MAX};
for (int end : ends) {
    int[] begins = new int[] {end - 10, end - 1, end, MIN, MAX};
    for (int begin : begins) {
        if (begin <= end && begin >= MIN && begin <= MAX) {
             testFoo(begin, end);
        }
    }
}
票数 2
EN

Stack Overflow用户

发布于 2012-05-30 19:14:51

你能在你的测试框架之外使用工具吗?如果是这样的话,我已经使用了James Bach's AllPairs,效果很好。还有Hexawise。

如果你没有意识到这一点,http://pairwise.org是一个阅读成对和组合测试和工具的好地方!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10796852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档