我的单元测试面临一个真正的问题。我现在正在做一个2年的项目,我已经写了2个月的单元测试了。由于代码的复杂性,大多数需要测试的函数调用5到15个其他函数,在每个函数中,大约使用5个对象和10个参数。一开始,我只是用junit和easymock测试简单的基本函数,但是现在我在使用这种复杂的函数,设置mock和它们的行为需要每个测试用例大约300行代码,这对我来说太长了。你们有别的解决办法吗?
4dc9hkyq1#
首先,区分哪些依赖关系真正困扰着你。看到了吗https://stackoverflow.com/a/60196328/5747415 获取使依赖关系变得麻烦的条件列表。那些不麻烦的依赖关系不需要被嘲笑。第二,如果有可能,尝试重新设计代码:将计算主导的代码(没有麻烦的依赖关系的代码)与交互主导的代码(主要处理调用其他代码的代码)分开。现在看看可以完美地实现这种分离的代码部分:在这些代码部分中,用单元测试的计算(以及可能不麻烦的依赖项)来测试代码——这里显然不需要模拟。只包含您将使用集成测试测试的交互的代码,同样没有模拟。第三,可能会有代码部分,这样的完美分离是困难的,你会留下与交互混合计算。在这里,您可能需要对double进行单元测试。对于这些情况,还有一些重新设计的策略可以减少模拟的工作量。例如,集中访问helper方法中的某些依赖项(例如,执行获取、验证和解压缩某些数据的helper方法):在这样的重新设计之后,不必模拟几个依赖项(同一示例:到数据库、验证库、,压缩库)您只需模拟helper函数。这个策略可以为你节省大量的双打制作的精力。
1条答案
按热度按时间4dc9hkyq1#
首先,区分哪些依赖关系真正困扰着你。看到了吗https://stackoverflow.com/a/60196328/5747415 获取使依赖关系变得麻烦的条件列表。那些不麻烦的依赖关系不需要被嘲笑。
第二,如果有可能,尝试重新设计代码:将计算主导的代码(没有麻烦的依赖关系的代码)与交互主导的代码(主要处理调用其他代码的代码)分开。现在看看可以完美地实现这种分离的代码部分:在这些代码部分中,用单元测试的计算(以及可能不麻烦的依赖项)来测试代码——这里显然不需要模拟。只包含您将使用集成测试测试的交互的代码,同样没有模拟。
第三,可能会有代码部分,这样的完美分离是困难的,你会留下与交互混合计算。在这里,您可能需要对double进行单元测试。对于这些情况,还有一些重新设计的策略可以减少模拟的工作量。例如,集中访问helper方法中的某些依赖项(例如,执行获取、验证和解压缩某些数据的helper方法):在这样的重新设计之后,不必模拟几个依赖项(同一示例:到数据库、验证库、,压缩库)您只需模拟helper函数。
这个策略可以为你节省大量的双打制作的精力。