单元测试策略:使用黑盒子进行冗余

时间:2017-01-19 13:42:40

标签: unit-testing oop black-box-testing

我在设计没有冗余的黑盒单元测试时遇到了问题。

以下是一个例子:

class A {
   Float function operationA(int: aNumber){
        if(aNumber > 0){
            return aNumber * 10 + 5.2;
        }
        else if (aNumber < 0) {
            return aNumber * 7 - 5.2;
        }
        else {
            return aNumber * 78 + 9.3;
        }
    }
}

class B {
    boolean status = true;

    Float function opearationB(int: theNumber){
        if(status == true){
            return a.operationA(aNumber);
        }
    }
}

为了正确测试A.operationA(),我必须编写至少三个单元测试(aNumber = 0,aNumber&gt; 0和aNumber&lt; 0 )。

现在假设我想测试B.functionB,使用黑盒策略,我应该重新编写类似的三个单元测试(theNumber = 0,theNumber&gt; 0和{{ 1}}&lt; 0)?在这种情况下,每次使用A.operationA ...

方法时,我都必须创建大量测试

1 个答案:

答案 0 :(得分:2)

如果可以放宽黑匣子约束,则可以删除所有复制。我非常喜欢Jay Fields对孤独与社交单元测试的定义,explained here

单独测试类A应该是微不足道的。它没有副作用,也没有合作者。理想情况下,B类也可以单独测试(单独),它的合作者,类a,被删除。这不仅可以让您孤立地运行类B,还可以帮助控制级联故障。如果在A类改变时用真实生命类A测试B类,则可能导致B类失败。

在某些时候,应该检查协作(社交),可能有几种方式:

  • 单个社交性测试,通过其公共接口调用b并触发A类中的默认情况
  • 执行特定用户素材或外部流程路径的更高级别测试,触发B类

抱歉没有回答你的直接问题。