对JUnit测试的建议

时间:2010-11-02 16:21:51

标签: unit-testing junit

所有

在为方法A(具有许多内部条件)编写测试方法时,我应该每次都专注于测试单个条件吗?我发现很难为方法A构建一个覆盖方法A中所有代码路径的测试方法。

任何人都可以建议我如何编写测试方法。?

5 个答案:

答案 0 :(得分:3)

不要觉得需要按每个方法进行一次测试。保持单元测试的细粒度,描述性和易于理解。如果这意味着所有调用相同目标方法的多个类似测试,那么就这样做。

就此而言,尽量避免为每种方法系统地编写单元测试的习惯。单元测试应该经过深思熟虑,而不是习惯性的。他们应该描述类的行为,而不是单个方法。

答案 1 :(得分:2)

你应该为每个执行路径编写一个测试。例如,如果你有

if (cond1 || cond2) {....}

你应该测试cond1和cond2。如果有意义的话,单独的测试方法是好的和鼓励的。没关系

testMyMethodCond1(){...}  

testMyMethodCond2(){...}

以及你需要的任何其他东西。 此外,当你说你的方法有“许多内部条件”时,你可能想重构你的代码,所以其中一些条件是用更容易测试的其他更小的方法处理的。

答案 2 :(得分:1)

首先,如果它有多个责任,你应该考虑将你的方法分成几种方法。其次,我建议你为每种方法编写多个测试。每个测试应该涵盖通过测试方法的特定路径。每个测试(当然)也应根据您的测试数据给出预期结果。

答案 3 :(得分:1)

测试应该比测试的更简单,最好更简单。否则,错误更可能出现在您的测试中。所以有很多小的简单测试方法执行你的方法的一小部分比一个大的笨重更好。 (您可以使用像Cobertura这样的代码覆盖率工具来验证您是否覆盖了方法中的所有路径。)

答案 4 :(得分:1)

我的偏好是每个JUnit测试方法都有一个失败点。这意味着我将测试每个目标类方法的许多JUnit测试方法。

在你的例子中,我可能有testA1(),testA2(),testA3()都测试相同的方法(A)。这些中的每一个都将测试方法A的不同成功或失败条件。

如果通过方法A有8条路径,那么至少需要8个测试方法来调用它,也许还需要一些用于错误处理条件的路径。