假设我有三种方法,都非常相似,但是具有不同的输入类型:

void printLargestNumber(int a, int b) { ... }
void printLargestNumber(double a, double b) { ... }
void printLargestNumber(String numberAsString, String numberAsString) { ... }

这三个都使用相同的基础逻辑。例如:也许 double 版本是唯一比较数字的版本,其他两个只是将其输入转换为 double.

我们可以想象一些不同的单位测试:第一个输入更大,第二个输入更大,两个输入都是负数,等等。

我的问题

如果所有三种方法都具有完整的测试(黑匣子,因为我们不认为核心实现是相同的)

或者

应该只有 double 对版本进行大量测试,另外两个测试对参数转换进行了验证(白盒测试,因为我们知道它们共享相同的实现,并且已经在 double 测试)?

有帮助吗?

解决方案

如果所有这些方法都是公开的,即外界可召唤,我肯定会通过全套测试进行测试。一个很好的理由是,白盒测试比黑盒测试更易碎。如果实施改变,则公共合同可能会改变其中一些方法。

其他提示

这取决于。

您认为实施可能会改变吗?如果是这样,请进行黑匣子测试。

如果您可以保证实现不会改变白框。但是,您能够保证这不是100%的机会。

您可以妥协并进行一些黑匣子测试,尤其是在边界条件周围。但是,编写测试应该很容易 - 因此,从这个角度来看,没有任何借口 不是 进行全黑框测试。唯一的限制因素是运行测试所需的时间。

也许您应该研究并行运行测试的可能性。

有一组明确行使公共接口的测试。我将这些视为黑盒测试。

有第二组测试可以看作查看实施的角案例。这是白盒测试,肯定在单位测试中占有一席之地。没有一些白色框实现知识,您将无法知道有趣的路径。我会特别注意弦盒,因为该接口允许无法干净地转换为双打的字符串,从而突破精度等的边界。

我会在整数案例中砍掉一些角落吗?我知道我在双重案件中推了道路,可能不应该在时间压力下。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top