“打破太简单”有多简单? - 解释

时间:2010-06-22 01:52:32

标签: unit-testing tdd

在JUnit常见问题解答中,您可以read不要测试太简单易破解的方法。虽然所有的例子都是合乎逻辑的(吸气者和制定者,代表团等),但我不确定我是否能够完全掌握“不能自行打破”的概念。你什么时候说这种方法“不能自行破解”?有人在意吗?

6 个答案:

答案 0 :(得分:3)

我认为“不能自行破解”意味着该方法仅使用其自己的类的元素,并且不依赖于任何其他对象/类的行为,或者它将其所有功能委托给某些其他方法或类(可能有自己的测试)。

基本思想是,如果你可以看到方法所做的一切,而不需要引用其他方法或类,并且你很确定它是正确的,那么可能不需要进行测试。

这里没有明确的界限。 “太容易破解”是旁观者的眼睛。

答案 1 :(得分:2)

尝试这样思考。你真的没有测试方法。您正在描述一些行为并提供一些如何使用它的示例,以便其他人(包括您以后的自己)可以在以后安全地改变该行为。这些例子恰好是可执行的。

如果您认为人们可以安全地更改您的代码,您无需担心。

答案 2 :(得分:1)

无论方法多么简单,它仍然可能是错误的。例如,您可能有两个类似命名的变量并访问错误的变量。但是,很快就会发现这些错误,一旦这些方法写得正确,它们就会保持正确,因此不值得永久保持测试。我建议考虑是否过于简单而不值得进行永久性测试,而不是“太简单易打破”。

答案 3 :(得分:1)

这样说,你正在建造一张木桌。

你会测试可能失败的东西。例如,将一个罐子放在桌子上,或者坐在桌子上,或者将桌子从一侧推到另一个房间等等。你正在测试桌子,你知道它在某种程度上是脆弱的,或者至少在一种你知道你会用它的方式。

你不会测试,指甲或其中一条腿,因为它们“太简单了,不能单独打破”。

单元测试也是如此,你不测试getter / setter,因为它们可能失败的唯一方法,因为运行时环境失败。您不测试将消息转发到其他方法的方法,因为它们太简单而不能自行中断,您最好测试引用的方法。

我希望这会有所帮助。

答案 4 :(得分:1)

如果您使用的是TDD,那么这个建议是错误的。在TDD情况下,您的函数存在,因为测试失败。函数是否简单无关紧要。

但是如果你之后在一些现有代码中添加测试,我可以理解你不应该测试不能破解的代码的论点。但我仍然认为这只是不必编写测试的借口。还要问问自己:如果那段代码不值得测试,那么可能根本不需要代码吗?

答案 5 :(得分:0)

我喜欢risk based approach of GAMP 5,它基本上意味着(在此上下文中)首先评估软件的各种可能风险,并且只定义高风险部分的测试。

虽然这适用于GxP环境,但它可以采用以下方式进行调整:某个类有多大可能存在错误的方法,错误的影响有多大?例如,如果方法决定是否授予用户对资源的访问权限,那么当然必须对此进行广泛的测试。

这意味着在确定在“太简单而无法破解”之间划清界线的位置时,可以帮助考虑潜在缺陷的可能后果。