如何用很少的单位对代码进行单元测试

时间:2011-10-28 13:42:45

标签: unit-testing

如何为现有的和已经实现的代码编写单元测试,这些代码采用了程序实现而不是OOP实现。我们正在使用Java / Spring,但是对于不同的关注点没有很多不同的bean,它们都被混合到每个主要功能的一个大类中。 (EG:我们为每个批处理作业提供了类/ bean,对于我们的DAO和一些实用类型的bean,就是这样)。

为了提供更多细节,需要测试的这些主要类大约是1k-2k行代码,他们使用的唯一依赖注入/ OOP是DAO和一些奇怪的实用程序。他们有一个公共方法,他们为他们共享的界面实现了这些方法。

3 个答案:

答案 0 :(得分:7)

从重构开始。现代IDE将允许您安全地重构,而不会破坏或更改代码语义。但你必须有意识地做到这一点并且要聪明。

从不属于任何其他类的“外部”类开始。

第一步是提取尽可能多的方法。通常,当您发现一个包含大量空行/注释的巨大方法时,它们可以分隔代码块,因此它们非常适合提取。还应考虑循环,嵌套条件,长switch等。

一旦你有大量的名字好的方法环顾四周,并尝试通过上下移动来对它们进行分组。如果某些方法紧密耦合且逻辑依赖,则将它们提取到单独的类中。 IDE会帮助你。

此过程可以在每个图层上重复多次。瞄准小的,有凝聚力的类,如果你不能命名它(例如你必须使用“”来表达正在做的方法/类),进一步提取。

当然你可以按原样测试它 - 我想每个可能的执行路径都可以通过不同的输入参数集来达到。但这将是调试的噩梦。

答案 1 :(得分:1)

只是为Tomasz Nurkiewicz的完美答案添加一些其他注意事项(我完全是第二个):

  • 有时(好吧,总是真的),在开始重构之前编写至少一个封装“验收测试”是有用的(如果没有现有的那个)。一旦通过,您就可以开始重构并确保在每一步都没有破坏任何“重要”的东西。在开始一项重要的重构任务之前,拥有这样的线束以保持理智是非常有用的:)

  • 重构不仅仅是一项技术任务:您不仅希望将大类分解为较小的类并将代码提取到方法中。您想要根据对象思考代码应该做什么,并转向更好的设计。从长远来看,它会让你的生活更轻松。

  • 根据经验,我尝试没有超过80-100行代码的类(理想情况下低于50)。当然也有例外,但是当它变大时,我通常会尝试将单独的关注点重构为注入主类的协作者对象。它使代码可读且易于测试。

答案 2 :(得分:0)

this链接中的一些指示。

如果你想超越它,我认为必须阅读"Working effectively with legacy code"