我们已开始使用Part Cover来跟踪应用程序的测试代码覆盖率。 IMO是一个很好的工具,用于获得测试的总分,并突出显示测试区域,你可能对测试有点懒,但今天我写了一个测试并意识到它没有真正测试任何有用的东西,它只是增加了我的报道!
如果您是TDD,那么您只编写代码来传递测试,并且测试充分描述了应用程序所需的所有功能。那么在这种情况下,进行覆盖率分析仍然非常有价值吗?
对于那些拥有覆盖工具的人来说,你是多么虔诚地坚持将覆盖率保持在100%并且你是否发现自己编写的测试并非真正测试任何东西,而只是为了保持你的报道?这不是坏事吗?
答案 0 :(得分:7)
覆盖工具只应用于告诉您未已经过测试的内容。您指出的场景说明了为什么您不能依赖它们来向您展示已测试的代码。编写测试只是因为覆盖率为100%是没有意义的(正如您所怀疑的那样),并且游戏非常容易,这不是一个真正有用的指标。我过去常常尝试保持在100%或接近100%,但我得出了与你相同的结论。我写的测试没有真正测试任何东西只是因为数字是正确的。使用这些工具来查找尚未测试的区域,然后编写好的测试或接受代码的这些部分并不重要的事实。
答案 1 :(得分:6)
我会扮演魔鬼的拥护者:如果增加你的报道意味着编写一个“没有测试任何有用的测试”,那么为什么那个代码呢?对我来说,这将是删除一些主线代码的论据。
或者开发一个有用的测试。例如,您可能会认为测试setter和getter没用。我也没有。但是,这些方法应该在测试其他东西时进行测试。否则,再次,为什么他们在那里?
但是你提出一个好处,即覆盖工具本身不应该是目的。特别是因为他们无法告诉你需要写什么代码。
我在这里详细介绍了http://www.kdgregory.com/index.php?page=junit.coverage
答案 2 :(得分:2)
如果您正在使用纯TDD,那么代码覆盖的价值就会降低,因为正如您所说,您只能从测试中编写代码,因此无论如何您应该在100%左右。但是,这可能是非常罕见的(有时不可能)如此纯粹地做到这一点。
如果你没有做纯TDD,100%无论如何都是一个非常不切实际的目标。我通常会尝试使用Roy Osherove的方法,只用逻辑来测试(例如不是直接的getter / setter或pass-throughs)。但是,更高的总是更好,并且可能很容易在那里增加一些测试以增加覆盖范围..!
答案 3 :(得分:1)
良好的合理化;)但是我们毕竟是人类,我晚上睡得更好,知道一种未经测试的方法或路径还没有投入生产。