Junit测试框架下多次复用Spring容器的单元测试方法及装置与流程

本发明涉及测试,尤其涉及一种junit测试框架下多次复用spring容器的单元测试方法、装置、设备和存储介质。
背景技术:
1、一般现有技术中都使用junit测试框架进行测试,且测试过程中需要启动spring容器。如果当前测试用例依赖spring容器,执行每个测试用例都需要启动一遍spring容器。
2、如果需要执行多个测试用例,则执行每个测试用例之前都要先启动一遍spring容器,这个spring容器启动过程重复且耗时。总结而言,存在以下问题:问题1:每次执行完一个测试用例,当前线程就结束了,容器也随之销毁,无法复用容器。大部分业务应用启动一次spring容器都需要一分钟以上,真正执行测试方法却只需几秒钟,因此会耗费大量时间在容器启动上,导致执行一次单元测试需要花费大量时间。问题2:每次执行完一个测试用例之后,整个上下文就清空了,无法快速重复执行最近一次执行的测试用例。
技术实现思路
1、本发明的目的是为了解决现有技术中存在的缺点,而提供了一种junit测试框架下多次复用spring容器的单元测试方法,包括以下步骤:
2、通过调用测试容器的启动业务应用组件启动spring容器,其中所述测试容器至少包括所述启动业务应用组件、初始化测试容器组件、监控控制台组件和关闭业务应用组件,将组件封装为jar包形式;
3、通过所述初始化测试容器组件初始化所述spring容器,其中所述测试容器被配置为无限循环模式,并且通过所述监控控制台组件监听控制台的输入指令作为循环体的中间执行过程;
4、读取控制台的输入指令,当所述输入指令为测试用例指令,则执行所述输入指令的单元测试用例,并基于配置的所述无限循环模式执行。
5、优选地,调用测试容器的启动业务应用组件启动spring容器包括:
6、获取当前线程的类加载器;
7、通过所述类加载器加载的当前应用指定目录下的资源文件;
8、通过所述类加载器筛选出所述资源文件的文件名后缀带.class的类文件;
9、根据所述类文件中是否包含@springbootapplication注解筛选出启动类;
10、调用所述启动类的main()方法启动所述spring容器。
11、优选地,执行所述输入指令的单元测试用例,并基于配置的所述无限循环模式执行,进一步包括:
12、进入一个无限循环的while方法;
13、在所述while方法中每次循环基于所述监控控制台组件读取所述输入指令,并执行所述输入指令。
14、优选地,读取控制台的输入指令,若判断所述输入指令的类型为预设的自定义指令时:
15、如果所述输入指令类型是自定义指令“r”,则从上下文的全局变量中取出上一次执行的测试用例指令,然后执行所述上一次执行的测试用例指令。
16、优选地,spring容器在测试执行完毕或需中断测试的条件下需要关闭时,执行线程通过调用所述关闭业务应用组件,结束当前spring容器线程。
17、优选地,当所述输入指令为测试用例指令时,还将测试用例指令保存到上下文:
18、执行所述测试用例指令,通过预设命令保存机制将最近一次的测试用例指令保存到预先构造的abstractcommand抽象命令类的子类命名实例中;
19、所述abstractcommand抽象命令类包括precmd变量和curcmd变量,其中所述precmd变量用来保存上一条命令,所述curcmd变量用来保存当前命令。
20、优选地,通过预设命令保存机制将最近一次的测试用例指令保存到预先构造的abstractcommand抽象命令类的子类命名实例中进一步包括:
21、根据预先构造的abstractcommand抽象命令类的子类命令实例,将当前curcmd变量的值赋给precmd变量以实现保存上一个命令;
22、将当前构造的子类命令实例赋值给curcmd变量,直到将所述测试用例指令保存到上下文的全局变量不再构造下一个abstractcommand抽象命令类的子类命令实例。
23、基于相同的构思本发明还提供了一种junit测试框架下多次复用spring容器的单元测试装置,包括:
24、启动spring容器模块,用于通过调用测试容器的启动业务应用组件启动spring容器,其中所述测试容器至少包括所述启动业务应用组件、初始化测试容器组件、监控控制台组件和关闭业务应用组件,将组件封装为jar包形式;
25、配置模块,用于通过所述初始化测试容器组件初始化所述spring容器,其中所述测试容器被配置为无限循环模式,并且通过所述监控控制台组件监听控制台的输入指令作为循环体的中间执行过程;
26、执行模块,用于读取控制台的输入指令,当所述输入指令为测试用例指令,则执行所述输入指令的单元测试用例,并基于配置的所述无限循环模式执行。
27、基于相同的构思本发明还提供一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,使得所述处理器执行如实施例中所述的junit测试框架下多次复用spring容器的单元测试方法的步骤。
28、基于相同的构思本发明还提供一种存储有计算机可读指令的存储介质,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行如实施例中所述的junit测试框架下多次复用spring容器的单元测试方法的步骤。
29、与现有技术相比,本发明的有益效果是:
30、1)本发明的技术方案中,通过监控控制台组件对输入指令进行监听,并且作为while方法的循环体的中间执行过程,使得结束一次单元测试后,执行while方法的当前线程并不关闭,继续根据监控控制台组件等待输入指令,获取到新的单元测试用例指令后,直接进行测试,实现启动一次spring容器,可以用于执行多个测试用例,达到节省单元测试时间和提高单元测试效率的目的;
31、2)本发明通过自定义输入指令,通过预先构造的abstractcommand抽象命令类的子类命名实例中的保存上一条命令的precmd变量和保存当前命令的curcmd变量,实现将上一个测试用例的类名称保存到上下文,监控控制台组件接收到自定义指令“r”后,从上下文全局变量中得到上一次执行的测试用例的类全称,当前线程根据此类全称实现快速方便地执行最近一次的测试用例。
技术特征:
1.一种junit测试框架下多次复用spring容器的单元测试方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的junit测试框架下多次复用spring容器的单元测试方法,其特征在于,调用测试容器的启动业务应用组件启动spring容器包括:
3.根据权利要求1所述的junit测试框架下多次复用spring容器的单元测试方法,其特征在于,执行所述输入指令的单元测试用例,并基于配置的所述无限循环模式执行,进一步包括:
4.根据权利要求1所述的junit测试框架下多次复用spring容器的单元测试方法,其特征在于,读取控制台的输入指令,若判断所述输入指令的类型为预设的自定义指令时:
5.根据权利要求1所述的junit测试框架下多次复用spring容器的单元测试方法,其特征在于,spring容器在测试执行完毕或需中断测试的条件下需要关闭时,执行线程通过调用所述关闭业务应用组件,结束当前spring容器线程。
6.根据权利要求1所述的junit测试框架下多次复用spring容器的单元测试方法,其特征在于,当所述输入指令为测试用例指令时,还将测试用例指令保存到上下文:
7.根据权利要求6所述的junit测试框架下多次复用spring容器的单元测试方法,其特征在于,通过预设命令保存机制将最近一次的测试用例指令保存到预先构造的abstractcommand抽象命令类的子类命名实例中进一步包括:
8.一种junit测试框架下多次复用spring容器的单元测试装置,其特征在于,包括:
9.一种计算机设备,其特征在于,包括存储器和处理器,所述存储器中存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,使得所述处理器执行如权利要求1至7中任一项所述的junit测试框架下多次复用spring容器的单元测试方法的步骤。
10.一种存储有计算机可读指令的存储介质,其特征在于,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行如权利要求1至7中任一项所述的junit测试框架下多次复用spring容器的单元测试方法的步骤。
技术总结
本发明涉及测试技术领域,尤其涉及一种Junit测试框架下多次复用Spring容器的单元测试方法,包括以下步骤:通过调用测试容器的启动业务应用组件启动Spring容器,其中测试容器至少包括初始化测试容器组件、监控控制台组件和关闭业务应用组件,并封装为jar包形式;通过初始化测试容器组件初始化Spring容器,其中测试容器被配置为无限循环模式,并且通过监控控制台组件监听控制台的输入指令作为循环体的中间执行过程;读取控制台的输入指令,当输入指令为测试用例指令,则执行输入指令的单元测试用例,并基于配置的无限循环模式执行。本发明通过无限循环模式实现启动一次Spring容器,可以执行多个测试用例,并通过自定义输入指令,实现快速方便地执行最近一次的测试用例。
技术研发人员:陈海翔
受保护的技术使用者:杭州乒乓智能技术有限公司
技术研发日:
技术公布日:2024/12/2
技术研发人员:陈海翔
技术所有人:杭州乒乓智能技术有限公司
备 注:该技术已申请专利,仅供学习研究,如用于商业用途,请联系技术所有人。
声 明 :此信息收集于网络,如果你是此专利的发明人不想本网站收录此信息请联系我们,我们会在第一时间删除
