关于打包中是否会将单元测试一起打包的测试
一、前言
今天很闲,就想到了服务优化方面,将公司的某个服务打包完成后,发现包已经将近60多MB,比原来多了那么一点(是因为加了很多业务导致,和单元测试没有关系),然后我就突然想到一个问题,单元测试,因为我们写的这些服务都是没有写单元测试代码的,但是这就有一个问题了,如果我写了单元测试的话,会不会把单元测试的代码一起打包?这就有问题了,如果会的话,就会导致服务打包后越来越大,而这些单元测试在服务包中又没有必要,所以自己进行了测试。
二、测试过程
1)我新建了一个SpringBoot的极致精简Demo,因为通过初始化一个SpringBoot项目的时候,会默认添加一个启动类和默认test的包,这样就够了。项目目录如下:
2)直接打包,看打包后target目录中的文件。我是在IDEA中通过工具先执行clean,然后是执行compile,最后执行package命令
clean不用说了,会清空target目录下的东西,
执行compile,会编译程序,检查是否有编译错误以及将java文件生成对应的class文件。
执行package,也就是将服务打包,如果你没有设置跳过单元测试的话,还会在打包前,执行单元测试。
可以看到没有错误,并且打包成功。打包后target目录如下:
3)解压打包好的jar包(因为jar包是ZIP压缩包的一种,所以是可以直接解压的),看里面是否含有test的class文件。
可以看到只有三个文件夹;BOOT-INF里面是你写的项目的代码以及一个lib文件夹,没有test文件
META-INF 文件夹是你在pom里面的依赖以及一个MF文件,这个MF文件就是用来描述项目中的资源位置(lib在哪,哪个是入口启动)的文件
org文件是springBoot类加载器
4)结论:SpringBoot打包时不会将单元测试的文件一起打包。
三、扩展测试
打包完成后,在target文件夹中会有一个test-classes文件,这个文件能不能去掉呢?
我下面的测试是通过package过程中跳过单元测试和通过在maven中设置忽略某些文件这两种方式进行的,过程和结果就不细说了,因为自己傻了,因为这些操作肯定会影响到test-classes文件的生成,因为只要单元测试的代码在,他就会在。(因为程序启动的时候实际执行的是class文件啊,就是这个目录下的)。