概述
Java单元测试实践-00.目录(9万多字文档+700多测试示例)
https://blog.csdn.net/a82514921/article/details/107969340
1. 使用IDEA、Eclipse执行单元测试
使用IDE执行单元测试是常见的执行方式,以下针对IntelliJ IDEA与Eclipse进行说明。
1.1. IntelliJ IDEA
1.1.1. 支持的功能
- 直接执行测试类
在IDEA中可直接通过Run或Debug执行测试类,会自动添加-ea参数( 参考 https://docs.oracle.com/cd/E19683-01/806-7930/assert-4/index.html 、 https://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html#BABDJJFI )。
- 执行测试方法
在IDEA中可以执行指定测试类的单个测试方法。支持在方法范围内点击“Run”或“Debug”按钮;支持在“Run/Debug Configurations”配置的Configuration->Method中配置需要执行的方法名称。
- 执行多个测试类
在IDEA中可一次执行多个测试类。支持选中多个类或选择目录执行Run或Debug。
可以同时分批执行多个测试类,如一次执行一个目录中的测试类,会创建多个进程执行,可提高效率,缩短执行时间。
一次执行太多测试类时,有可能会出现异常java.lang.OutOfMemoryError: Java heap space。
- 导出测试结果
在IDEA的Run或Debug窗口中,可以使用“Export Test Results”按钮导出测试报告,支持HTML、XML等格式,当需要导出测试结果的类太多时,可能会导出失败。
- 查看测试结果历史记录
在IDEA的Run或Debug窗口中,可以使用“Import Test Results”按钮查看测试结果的历史记录。
- 复制完成测试的类名/方法名
在IDEA的Run或Debug窗口中,会显示完成测试的类名/方法名,支持选中类名及方法名后复制文本,便于记录测试情况,如测试不通过的类等。
- 仅显示执行失败的结果
在IDEA的Run或Debug窗口中,取消选中“Show Passed”选项后,只会显示执行失败的结果,便于查看。
- 重新执行失败的测试类
在IDEA的Run或Debug窗口中,点击“Rerun Failed Tests”按钮,可重新执行失败的测试类。
1.1.2. 对JUnint的支持
查看IDEA执行单元测试类时执行的Java命令,可以分析IDEA对JUnit支持的实现方式。
1.1.2.1. JUnit引用
IDEA执行单元测试时,在“-classpath”参数中指定了IDEA安装目录中的pluginsjunitlib目录中的junit-rt.jar、junit5-rt.jar文件。
执行的主类为com.intellij.rt.execution.junit.JUnitStarter,在junit-rt.jar中。
1.1.2.2. 执行单个类
IDEA在执行单个测试类时,执行的命令最后会包含被执行类的完整类名,如“adrninistrator.test.testframework.spring.test.TestSpringReuseContext1”。
1.1.2.3. 执行单个方法
在执行单个测试方法时,执行的命令最后会包含被执行类的完整类名及方法名( 使用半角逗号分隔 ),如“adrninistrator.test.testframework.spring.test.TestSpringReuseContext1,test”。
1.1.2.4. 执行多个类
IDEA在执行多个测试类时,执行的命令最后会包含当前用户的临时目录的文件路径,以及socket参数,如“@w@C:UsersxxxAppDataLocalTempidea_working_dirs_junit.tmp @C:UsersxxxAppDataLocalTempidea_junit.tmp -socket52751”。
idea_junit.tmp文件中包含了被执行测试类的包名及完整类名,如下所示:
adrninistrator.test.testframework.spring.test
adrninistrator.test.testframework.spring.test.TestSpringReuseContext1
adrninistrator.test.testframework.spring.test.TestSpringReuseContext2
adrninistrator.test.testframework.spring.test.TestSpringRefreshContextBeforeClass
adrninistrator.test.testframework.spring.test.TestSpringRefreshContextBeforeMethod
1.1.3. main模块与test模块资源文件生效情况
IDEA在执行测试类时,优先使用test模块中的资源文件,对于main模块与test模块均存在的同名资源文件,会使用test模块中的资源文件;对于仅在main模块中存在的同名资源文件,会使用main模块中的资源文件。
- 查看进程的classpath系统属性
在示例TestConf类中,打印了“java.class.path”系统属性(也可通过jinfo命令查看),main模块与test模块的类及资源文件目录的顺序如下:
outtestclasses
outtestresources
outproductionclasses
outproductionresources
以上分别对应test模块编译后的类目录、test模块的资源文件目录、main模块的编译后的类目录、main模块的资源文件目录,可以确认IDEA在执行测试类时,classpath中test模块的资源文件目录在main模块的资源文件目录之前。
- 在测试类中获取资源文件路径
applicationContext.xml文件在main模块与test模块的resources目录中均存在,在TestConf类中打印classpath中的applicationContext.xml文件路径,可证明使用了test模块中的资源文件,例如“/E:/UnitTest/out/test/resources/applicationContext.xml”。
TestTableMapper.xml文件仅在main模块的resources目录中存在,在TestConf类中打印classpath中的TestTableMapper.xml文件路径,证明使用了main模块中的资源文件,例如“/E:/UnitTest/out/production/resources/com/adrninistrator/dao/sqlmap/TestTableMapper.xml”。
1.1.4. 修改测试代码执行方式
在IDEA 2019之后的版本,可以选择测试代码及正常执行使用Gradle还是IDEA,默认使用Gradle。
可在IDEA的“File | Settings | Build, Execution, Deployment | Build Tools | Gradle”选项中进行修改,如下图所示。
1.2. Eclipse
1.2.1. 支持的功能
- 直接执行测试类
在Eclipse中可直接通过Run或Debug执行测试类,会自动添加-ea参数,支持JUnit Test( 使用“Gradle Test”执行方式时会执行其他未指定的类,因此不使用 )。
- 执行测试方法
在Eclipse中可以执行指定测试类的单个测试方法。支持在“Run Configurations/Debug Configurations”配置的Test->Test method中配置需要执行的方法名称。
- 执行多个测试类
在Eclipse中可一次执行多个测试类。支持选中目录后使用Run As/Debug As执行JUnit Test( 选中多个类后只支持使用Gradle Test );支持在“Run Configurations/Debug Configurations”配置的“Test”->“Run all tests in the selected project, package or source folder”选择需要执行的测试类所在的工程、包或目录。
- 导出测试结果
在Eclipse的JUnit窗口中,可以使用“Test Run History”“Export”按钮导出测试报告,为XML格式。
- 查看测试结果历史记录
在Eclipse的JUnit窗口中,可以使用“Test Run History”按钮查看测试结果的历史记录。
- 复制完成测试的类名/方法名
在Eclipse的JUnit窗口中,会显示完成测试的类名/方法名,支持选中类名及方法名后复制文本。
- 仅显示执行失败的结果
在Eclipse的JUnit窗口中,点击“Show Failures Only”按钮后,只会显示执行失败的结果,便于查看。
1.2.2. 对JUnint的支持
通过查看Eclipse执行单元测试类时的Java命令,可以分析Eclipse对JUnit支持的实现方式。
1.2.2.1. JUnit引用
Eclipse执行单元测试时,在“-classpath”参数中指定了Eclipse安装目录中的插件目录,如“configuration/org.eclipse.osgi/409/0/.cp、configuration/org.eclipse.osgi/408/0/.cp”,在以上目录的.api_description文件中,保存了插件名称,如org.eclipse.jdt.junit4.runtime_1.1.1000.v20190510-0840、org.eclipse.jdt.junit.runtime_3.4.1000.v20190510-0840。
执行的主类为org.eclipse.jdt.internal.junit.runner.RemoteTestRunner,在org.eclipse.jdt.junit.runtime插件中。
通过“-testLoaderClass”参数指定了类org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader,在org.eclipse.jdt.junit4.runtime插件中;通过“-loaderpluginname”参数指定了插件名称org.eclipse.jdt.junit4.runtime。
1.2.2.2. 执行单个类
Eclipse在执行单个测试类时,执行的命令最后通过“-classNames”参数指定了被执行类的完整类名,如“-classNames adrninistrator.test.testframework.spring.test.TestSpringReuseContext1”。
1.2.2.3. 执行单个方法
Eclipse在执行单个测试方法时,执行的命令最后通过“-test”参数指定了被执行类的完整类名及方法( 使用半角冒号分隔 ),如“-test adrninistrator.test.testframework.spring.test.TestSpringReuseContext1:test”
1.2.2.4. 执行多个类
Eclipse在执行多个测试类时,执行的命令最后会包含当前用户的临时目录的文件路径,如“-testNameFile “C:UsersxxxAppDataLocalTemptestNames7779770965340024642.txt””。
上述文件中包含了被执行测试类的包名及完整类名,如下所示:
adrninistrator.test.testframework.spring.test.TestSpringRefreshContextBeforeMethod
adrninistrator.test.testframework.spring.test.TestSpringRefreshContextBeforeClass
adrninistrator.test.testframework.spring.test.TestSpringReuseContext2
adrninistrator.test.testframework.spring.test.TestSpringReuseContext1
1.2.3. main模块与test模块资源文件生效情况
- Eclipse默认的classpath系统属性顺序
Eclipse在执行测试类时,默认情况下会优先使用main模块的资源文件。
在示例TestConf类中打印“java.class.path”系统属性,main模块与test模块的类及资源文件路径的顺序如下:
binmain
bintest
以上分别对应main模块编译后的类及资源文件目录、test模块编译后的类及资源文件目录,可以确认Eclipse在执行测试类时,默认情况下classpath中main模块的资源文件目录优先级高于test模块的资源文件目录。
默认情况下,Eclipse的“Java Build Path”的“Order and Export”配置如下所示。可以看到main/java在test/java之前,main/resources在test/resources之前。
- 修改Eclipse的classpath系统属性顺序
当需要使Eclipse优先使用test模块的资源文件时,可以打开对应工程的Properties配置,“Java Build Path”“Order and Export”标签页,将“test/java”与“test/resources”均移动至“main/java”及“main/resources”之前,Eclipse在执行测试类时,classpath中的test模块的资源文件目录会变为在main模块的资源文件目录之前。
完成上述设置后,Eclipse的“Java Build Path”的“Order and Export”配置如下所示。
完成以上设置后,使用Eclipse执行测试类时,会优先使用test模块的资源文件。
当需要使用Eclipse执行main模块的类时,需要恢复上述配置。
最后
以上就是生动白云为你收集整理的Java单元测试实践-04.使用IDEA、Eclipse执行单元测试1. 使用IDEA、Eclipse执行单元测试的全部内容,希望文章能够帮你解决Java单元测试实践-04.使用IDEA、Eclipse执行单元测试1. 使用IDEA、Eclipse执行单元测试所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复