我们已经分配了一个开源软件来测试! 该软件有3个包,每个包有10个或更多类,每个类可能有几十个方法。
我的问题是,在开始结构(白盒)测试之前,我是否需要了解软件中的每一行代码?
我是否需要了解从main()方法开始的整个程序流程?
我应该采取什么方法?
答案 0 :(得分:1)
如果你有关于每个方法应该做什么的规范:指定输入的预期输出是什么,那么你不需要进入这些方法的实现细节。通常这应该写下来!
您可以编写单元测试来检查方法是否满足预定义的合同(如果存在)。
如果您没有规格或最近的趋势' UserStories'你需要对你的规格进行逆向工程。 :)您需要分析每个方法以了解它在做什么,接下来您将检查这些方法的调用位置,以便找出方法调用中传递的可能值。同样来自调用方法,您可能会了解角落情况。那些你绝对想要测试的人。
....慢慢地你学会了整个代码:)
答案 1 :(得分:0)
不,您不必了解编写单元测试的每一行代码。我对单元测试还不是很有经验,但到目前为止看到的是测试每个(或大多数)对某个输入做出不同反应的方法( - >参数,对象变量......)。
因此,您必须知道方法的作用,成功执行的操作以及何时失败。对于某些方法,即使这些案例之间的转折点也很重要。
例如
我们假设我们有一个总和两个整数的方法,必须等于或大于0:
public static int sumInts(int a, int b) {
if (a < 0 || b < 0) throw new IllegalArgumentException("'a' and 'b' should be 0 or above!");
return a + b;
}
你可以测试什么:
当然,这只是一个非常简单的例子。您测试的内容取决于您的方法。对于这种方法,最后两次测试可能完全不需要。但是有些方法更复杂,可能会有用。
答案 2 :(得分:0)
有几种类型的测试。
BigInteger fact(int n)
方法,你必须在正常的正整数,零,负整数和最大/最小值上编写测试。有几个图书馆会帮助您:JUnit,TestNG等。在软件行业黑暗时代之后,社区终于找到了一些好的单元测试实践: