我已经将基于Spring Boot的项目拆分为几个Maven模块 . 现在只有war-project包含一个入门类(有一个main方法,启动Spring),其他模块都是jar类型 .
如果他们不包括启动器,我如何测试jar项目?
Example JUnit test case header:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(StarterClassInDifferentProject.class)
...
3 回答
我认为每个模块都应该提供上下文测试,因此您可以在早期找到有关线路和配置的问题,而不是依靠完整的应用程序测试来查找它们 .
我在同一个模块中使用测试应用程序类解决了这个问题 . 确保此主要类位于 test 目录中 .
你的上下文现在应该工作 .
我解决了类似的情况 . 我有一个包含两个模块的项目:
带有域和实用程序类的"lib"项目,
a "web"项目带有 spring 启动应用程序,模板,控制器等......
我想以spring-boot-test方式测试“lib”项目 .
首先,在pom.xml中包含范围为“test”的必需依赖项(在我的例子中还有H2数据库):
出于测试目的,在“lib”项目的测试源中,我有一个充当我的测试配置的类
这将设置H2数据库,以测试应用程序的数据访问功能
最后,只有在我认为有用的测试类中,我才将配置执行配置为使用测试配置(我并不总是需要这样做,但有时它很方便):
问题是
我相信正确的答案是,你的jar子模块不应该与spring-boot上下文联合测试 .
事实上,你的jar项目中的大多数(如果不是全部)测试都不应该使用RunWith(Spring ...)它们应该是vanilla或者使用模拟库,例如@RunWith(MockitoJUnitRunner.class) .
如果您阅读SpringApplicationConfiguration's javadoc:
它被认为是集成测试 .
除此之外,您还可以使用spring子上下文(而不是spring-boot)在jar子模块中使用'test spring configuration'来启动测试 . 定义您的bean /资源并在测试中使用它 .
例如,我这样做是为了测试Spring数据存储库,使用测试 spring 配置(不依赖于spring-boot) .