单元测试策略:使用黑盒的冗余
Unit tests strategy : redundancy using Black-box
我在设计没有冗余的黑盒单元测试时遇到问题。
这是一个例子:
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) ?在那种情况下,每次使用 A.operationA ...
方法时,我都必须创建大量测试
如果可以放宽黑盒约束,则可以删除所有重复项。我真的很喜欢 Jay Fields 对单独与社交单元测试的定义,explained here。
单独测试 class A
应该是微不足道的。它没有副作用,也没有合作者。理想情况下,class B 也可以单独(单独)进行测试,其中合作者的 class a 被删除。这不仅可以让您单独练习 class B
,还有助于控制级联故障。如果 class B 用现实生活中的 class A 进行测试,当 class A 发生变化时,它可能会导致 class B 发生故障。
在某些时候可能应该检查协作(社交),有几种方法可能是:
- 通过其 public 接口调用 b 并触发 class A
中的默认情况的单个社交测试
- 执行特定用户故事或外部流程路径的更高级别测试,触发 class B
抱歉没有回答您的直接问题。
我在设计没有冗余的黑盒单元测试时遇到问题。
这是一个例子:
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) ?在那种情况下,每次使用 A.operationA ...
如果可以放宽黑盒约束,则可以删除所有重复项。我真的很喜欢 Jay Fields 对单独与社交单元测试的定义,explained here。
单独测试 class A
应该是微不足道的。它没有副作用,也没有合作者。理想情况下,class B 也可以单独(单独)进行测试,其中合作者的 class a 被删除。这不仅可以让您单独练习 class B
,还有助于控制级联故障。如果 class B 用现实生活中的 class A 进行测试,当 class A 发生变化时,它可能会导致 class B 发生故障。
在某些时候可能应该检查协作(社交),有几种方法可能是:
- 通过其 public 接口调用 b 并触发 class A 中的默认情况的单个社交测试
- 执行特定用户故事或外部流程路径的更高级别测试,触发 class B
抱歉没有回答您的直接问题。