我们已经开始使用部件覆盖来跟踪应用程序的测试代码覆盖率。它是一个很好的工具,可以为您的测试获得一个整体的分数,并突出您可能对测试有些懒惰的测试区域,但是今天我编写了一个测试,并意识到它并没有真正测试任何有用的东西,它只是增加了我的覆盖率!
如果您是TDD,那么您只编写通过测试的代码,并且测试丰富地描述了应用程序所需的所有功能。因此,在这种情况下,进行覆盖分析仍然很有价值吗?
对于那些有覆盖工具的人来说,你有多虔诚地坚持将覆盖率保持在100%,你有没有发现自己编写的测试并不真正测试任何东西,只是为了保持覆盖率的提高?这不是的坏事吗,?
发布于 2010-08-13 15:13:13
只应使用覆盖工具来告诉您哪些没有经过测试。您所指出的场景说明了为什么不能依赖它们来向您展示已经测试过的代码。编写测试--只为了达到100%的覆盖率--是毫无意义的(正如您所怀疑的),而且它是如此简单,以至于这并不是一个真正有用的度量标准。我曾经试着保持在或接近100%,但我得出了和你一样的结论。我写的测试并没有真正测试任何东西,所以数字是正确的。使用这些工具找出尚未测试的区域,然后编写好的测试,或者接受代码中那些部分并不重要的事实。
发布于 2010-08-13 15:22:24
我将扮演魔鬼的提倡者:如果增加覆盖率意味着编写一个“没有测试任何有用的东西”的测试,那么为什么会有这些代码呢?对我来说,这将是删除一些主线代码的一个参数。
或者做一些有用的事情。例如,您可能会认为它对测试setter和getter没有用处。我也是如此。然而,这些方法应该在测试其他方法的同时进行测试。否则,又一次,他们为什么在那里?
但是,您提出了一个很好的观点,即覆盖工具本身不应该是目的。特别是因为他们不能告诉你你需要写什么代码。
我在这里详细介绍了:http://www.kdgregory.com/index.php?page=junit.coverage
发布于 2010-08-13 15:19:12
如果您做的是纯TDD,那么代码覆盖率就会降低,因为正如您所说的,您只编写测试代码,所以您应该在100%左右。但这样做的可能性很小(有时也是不可能的)。
如果你没有做纯TDD,100%是一个非常不现实的目标。我通常尝试使用的方法,并且只使用逻辑测试事物(例如,不直接获取/设置或传递)。但是,越高越好,为了增加覆盖率,可能会有更多的测试。
https://stackoverflow.com/questions/3478192
复制相似问题