如何在单元测试中管理大型类和重构(Junit)

图古尔

在我们的项目中,它具有庞大的类和子关系,我们已经开发了几个月。另外,我们一直在开发junit测试用例。

自动单元测试通常很好,但是在现实生活中,这并不容易。管理单元测试体系结构比创建模拟对象和存根等更容易。此外,我们正在测试dao和service层。

问题是我们的类有这么多属性。(我知道这不是一个很好的面向对象的设计,而是传统的体系结构。)

例如; 客户类别具有58个属性,并且与地址,marsaccounts等相关。总的来说,如果要测试该类别,则必须创建输入,具有90个或更多属性的输入

我们的体系结构对客户有很多业务规则,因此我们必须创建50多个客户输入来测试每个规则,方法或流程。

简而言之,您必须为所有属性创建4500个(90 x 50)属性,但为可靠的测试创建较少的属性(仅必要属性)。

准备测试输入既痛苦又烦人。想象一下,将2列添加到Customer对象,它们存储了关键值。看起来很容易,但是重构测试输入却是毁灭性的。

如何管理测试存根,如何克服庞大的输入集?

问候。

彼德

看来您只有两个选择:减少相关的属性或学习轻松设置具有大量属性的测试。

较少的属性:重构。由于我们不了解您的业务,因此没有人会为您提供更多详细的帮助。尝试找到控制某些逻辑的较小属性组,并仅使用那些属性来测试该逻辑。

简便的测试设置:您可以使用客户构建器。默认情况下,他们会使用一些标准/最常用的设置来创建客户,然后根据需要调整结果

customer = makeCustomer().withActiveStatus(false).withDebit(3000).build()

然后,当出现新属性时,您只需要makeCustomer()在一个地方更改即可

您还可以使用参数化测试将一个测试用例定义为一个衬套,或从电子表格加载数据,这可能更易于维护。

通常,当出现新属性时,并不是说它会完全改变所有内容。通常,当该属性为非标准属性时,它只会在一处添加新的行为。因此通常只是将默认属性添加到构建器中,并进行一些覆盖该属性的测试

简化测试的另一种方法是进行属性测试(QuickCheck系列),尽管在业务逻辑中并不总是很容易使用它

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在大型和复杂的类中实现单元测试?

如何在Groovy,JUnit和Maven的单元测试中声明我“期望”异常?

如何重构单元测试?

如何在Python单元测试中模拟类?

如何在Django和Python的单元测试中正确模拟大型XML?

如何区分测试类中的单元测试和集成测试?

如何在单元测试用例(grails,junit)中声明“ render”中的值

如何在单元测试中重写被测试的类所调用的方法

如何在JUnit 5单元测试中为@Autowired模拟对象?

如何在junit中编写Jooq Select Quary的单元测试

如何在 JUnit 单元测试中从运行中排除 Spring Boot 组件?

在python单元测试中模拟类和类方法

java - 如何在java中对具有嵌套静态类的类进行单元测试?

如何在 Typo3 单元测试中模拟对象管理器

如何在AngularJS中组织单元测试和e2e测试?

如何在Symfony2中分离单元测试和功能测试?

如何在Android中的单元测试和仪器测试之间共享资源?

JUnit和Clojure单元测试

如何在单元测试中保留相同的类实例?

如何为android方法和类编写单元测试?

如何在Intellij Idea中自动移动单元测试类?

如何在Mockito单元测试中为基于SpringBoot的服务类指定匹配器

如何在类方法中模拟python的datetime.now()进行单元测试?

如何在单元测试中设置不同的类路径以使用Spring加载资源

如何在基类方法中收到单元测试委托?

如何在Angular中模拟父类方法进行单元测试?

如何在 xUnit 中对类的多个实例进行单元测试

如何在角度中对创建导入类对象的方法进行单元测试

单元测试范围和测试大型组件