您是否有任何将单元测试改装到目前没有单元测试的代码库的策略?
答案 0 :(得分:10)
阅读Working Effectively With Legacy Code by Feathers。
Jimmy Bogard有good blog series on SOC。
答案 1 :(得分:6)
在没有任何单元测试的情况下改造现有项目的最佳方法是在修复错误时执行此操作。使用重现错误的步骤编写一个测试,该测试在包含错误的逻辑上失败。然后重构代码直到测试通过。现在您可以确信错误已得到修复,并且不会在循环中稍后介绍,并且您开始将单元测试引入项目中。
答案 2 :(得分:4)
这是关于测试的another great article。特别是,它引用了一些相关的引用:
这是一个糟糕的主意 - 决定你要花一个星期的时间为你的项目构建一个测试套件。首先,你可能会感到沮丧,并在测试时倦怠。其次,你最初可能会编写不好的测试,所以即使你写了一堆测试,你也需要回去重写它们,你会发现它们有多慢,脆弱或者不可读。 / p>
我认为您最好一次构建测试1,因为您正在修复错误或添加新功能...不要尝试构建缺少的测试用例,每个测试应该有一个最终目标,而不仅仅是提高覆盖率。
答案 3 :(得分:2)
答案 4 :(得分:2)
如果您尝试将单元测试添加到旧的perl代码中,我强烈建议
Ian Langworth和chromatic的Perl Testing: A Developer's Notebook。
它有一些非常好的技巧来测试遗留和“不可测试”的代码。
答案 5 :(得分:2)
为什么要添加单元测试?你觉得代码有bug吗?你想要做点什么吗?你准备开始一项新功能吗?
如果它是已经发布了很长时间的旧产品,那么我会同意其他产品,只有在发现错误或添加新功能时才会添加测试。
如果它是仍在开发但尚未发布或仅最近发布的产品,那么我首先要查看代码。如果我看到不太正确的东西,那么我会为它添加一个测试。我可能会做一些测试来创建一些样本数据。创建样本数据似乎为您提供了很大的帮助,它也很有用。
我认为即使您没有要测试的错误也可以编写测试 - 当您在以后添加新功能或修复错误时,您的测试会确认您没有引入新错误。
答案 6 :(得分:1)
我们是否可能陷入恐慌并且在单元测试和性能测试之间感到困惑?您的应用程序是否适用于少数用户,但在负载较重时开始抛出错误?如果是这样,单元测试不是答案。单元测试!=负载测试。
如果单元测试实际上是答案,那么改装单元测试是一个好主意,因为它有助于清理代码。只是准备好重构一下。使用TDD编写的代码看起来与没有TDD编写的代码有很大不同。在我的例子中,我有一个方法HandleDisposition(),它处理了很多情况。如果我们用TDD编写代码,那么这种方法就不存在了。在改进单元测试时,我们重构了该函数,现在有了像XDisposition(),YDisposition(),ZDisposition()这样的方法,这些方法更容易编写单元测试。