2017-01-19 46 views
2

我有一个问题设计黑盒单元测试没有冗余。单元测试策略:使用黑盒冗余

下面是一个例子:

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> 0和aNumber < 0) 。

现在让我们说,我想测试B.functionB,采用黑盒的策略,我应该重新写的类似三个单元测试(theNumber = 0,theNumber> 0和theNumber < 0)?在这种情况下,每次使用方法时,我都必须创建大量测试。操作...

+0

为什么会出现黑匣子测试要求? – dm03514

+0

'A类'的测试就足够了。 'A类是B类的依赖关系。当测试B时,A类可以被嘲弄/伪造,以便仅测试B的附加功能。无需重新测试已经涵盖的功能。 – Nkosi

+0

@ dm03514在这种情况下使用黑盒策略将允许单元测试在操作A改变时失败,并返回一个结果来改变操作B的结果。这只能通过检查operationB在operationB中调用(白盒策略)来实现。 –

回答

2

如果黑盒子约束可以放松,则可以删除所有重复项。我非常喜欢Jay Fields对单身和社交单元测试的定义,explained here

单独测试类A应该是微不足道的。它没有副作用,也没有合作者。理想情况下,B级也可以单独进行测试(孤立的),它的合作者a级被剔除。这不仅可以让您独立执行类B,还可以帮助控制级联故障。如果B类与当A级改变它可以在B类

导致失败在一些点协作(社交的),也许应该检查现实生活中的A类测试,一对夫妇的方式可能是:

  • 一个socialable测试,透过它的公共接口调用b和触发类的缺省情况下的
  • 更高级别的测试,行使特定的用户故事或外部流动路径,从而引发b类

对不起没回应你的可怕ct问题。