在JAR中管理依赖项-测试自动化

时间:2018-12-27 20:11:29

标签: java maven spring-boot jar dependencies

我不确定这是否是发布此类问题的最佳地点,但是就在这里。我是一名测试自动化工程师,主要使用后端Spring Boot命令行应用程序。我的测试在较高水平上旨在确保正确处理在应用程序中引发的任何类型的数据。我们是一家Java商店。

与任何“良好”测试实践一样,我将应用程序像黑盒一样对待,因为我没有引入模型对象来运行测试。我只是向应用程序提供数据,执行一个命令行类型脚本(run.sh)来获取我的数据并对其进行处理。我的测试主要由JDBC(与数据库进行交互)和大量ArrayList实用程序组成,我将它们组合在一起以整理结果集并获取特定的数据库信息。

到目前为止,我已经将测试部署为JAR。我将所有内容捆绑在一起,并使用将执行测试的脚本将其部署到环境中。当应用运行时,测试不会运行。尽管它们确实存在于项目内部,但它们是具有单独启动器类的单独实体。但是,我发现在JAR中管理依赖项确实令人头疼。有没有更好的方法来为命令行应用程序部署自动化/集成测试?

我正在拉入Maven Shade插件以将所有依赖项捆绑到一个“上帝JAR”中,但这并不能帮助我解决尝试执行JAR时出现的问题。我收到多个与应用程序本身有关的bean实例化错误,而不是与我的测试有关。因此,我引入了应用程序模型,并将应用程序本身作为依赖项。当我在初始测试中运行测试时,它们工作得很好。部署到环境后,它们继续正常工作。快进几个月,对应用程序进行了一些更改,现在,当我构建新的JAR时,这是一个依赖的噩梦。

TLDR:我在管理Maven项目中的依赖项时遇到麻烦,集成测试JAR。是否有更好的方法来为依赖关系管理更容易的命令行应用程序部署自动化/集成测试?

(注意:我对这个世界还比较陌生,如果问题似乎有点含糊,请原谅我)。

1 个答案:

答案 0 :(得分:0)

我认为当您使用shade插件重新包装spring boot jar时会发生错误。 spring boot的工作方式是将jar本身添加为jar,并配置其自己的类加载器(在meta config中),该类加载器能够从jar文件中的jar文件读取类。标准的Java类加载器不会执行此操作-这可能就是为什么shade插件会漏掉一些jar(可能是嵌入在spring boot uber jar中的jar)的原因。

我要尝试的是创建一个Spring Boot应用程序的测试版本,该版本包含编译范围内的测试类以及对原始Spring Boot jar的依赖(您不需要uber jar-因此您可能必须在原始的(应用程序)spring boot插件配置中添加一个classifier,以使该jar仍然可用,因为默认情况下该jar已被替换),并使用spring boot plugin来打包其测试版本(使用依赖关系及其在原始应用中使用的分类器)。