Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 如何用很少的单元测试代码_Unit Testing - Fatal编程技术网

Unit testing 如何用很少的单元测试代码

Unit testing 如何用很少的单元测试代码,unit-testing,Unit Testing,如何为现有的和已经实现的代码编写单元测试,这些代码采用过程实现而不是OOP实现。我们使用的是Java/Spring,但是对于不同的关注点,没有太多不同的bean,每个主要功能都混合到一个大类中。(例如:对于每个批处理作业,对于DAO和一些util类型的bean,我们都有类/bean,仅此而已) 为了提供更多细节,这些需要测试的主要类大约有1k-2k行代码,它们使用的唯一依赖注入/OOP是DAO和一些奇怪的实用程序。他们有大约1个公共方法,它们为所有人共享的接口实现。从重构开始。现代IDE将允许您

如何为现有的和已经实现的代码编写单元测试,这些代码采用过程实现而不是OOP实现。我们使用的是Java/Spring,但是对于不同的关注点,没有太多不同的bean,每个主要功能都混合到一个大类中。(例如:对于每个批处理作业,对于DAO和一些util类型的bean,我们都有类/bean,仅此而已)


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

从重构开始。现代IDE将允许您在不破坏或更改代码语义的情况下安全地重构。但你必须有意识地这样做,并且要聪明

从不依赖于任何其他类的“外部”类开始

第一步是提取尽可能多的方法。通常,当您发现一个巨大的方法,其中有许多空行/注释分隔代码块时,它们很适合提取。还应考虑循环、嵌套条件、长
开关
es等

一旦你有过多的命名良好的方法,你就可以四处看看,并尝试通过上下移动来对它们进行分组。如果某个方法是紧密耦合和逻辑相关的,则将它们提取到单独的类中。IDE将帮助您

这个过程可以在每一层上重复多次。针对小的、内聚的类,如果您不能命名它(例如,您必须使用“And”来表示方法/类正在做什么),请进一步提取


当然,您可以按原样进行测试-我想每个可能的执行路径都可以使用不同的输入参数集来实现。但这将是调试的噩梦

为了给托马兹·努尔基维茨(我完全赞同)的伟大回答添加一些其他考虑因素:

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

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

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


这是一个很好的答案。遵循这种方法,您的代码将在短时间内变得更加健壮,并且您将在这个过程中获得坚实的OO技能。