我目前遇到弹簧启动和多个maven项目结构的一些问题。我使用的是Spring Boot 4.3.1。
我的项目结构如下:
parent
-- pom.xml
-- application
-- pom.xml
-- src
-- main
-- java
-- Application.java (annotated with @SpringBootApplication)
-- test
-- java
-- MyApplicationTest.java (annotated with @SpringBootTest)
-- library
-- pom.xml
-- src
-- main
-- java (...)
-- test
-- java
-- MyLibraryTest.java (annotated with @SpringBootTest)
application
模块依赖于library
。
MyApplicationTest
效果非常好,但正在运行MyLibraryTest
,我失败并出现以下错误:
java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test at org.springframework.util.Assert.state(Assert.java:392)
at org.springframework.boot.test.context.SpringBootTestContextBootstrapper.getOr FindConfigurationClasses(SpringBootTestContextBootstrapper.java:173)
at org.springframework.boot.test.context.SpringBootTestContextBootstrapper.processMergedContextConfiguration(SpringBootTestContextBootstrapper.java:133)
at org.springframework.test.context.support.AbstractTestContextBootstrapper.buildMergedContextConfiguration(AbstractTestContextBootstrapper.java:409)
at org.springframework.test.context.support.AbstractTestContextBootstrapper.buildMergedContextConfiguration(AbstractTestContextBootstrapper.java:305)
at org.springframework.test.context.support.AbstractTestContextBootstrapper.buildTestContext(AbstractTestContextBootstrapper.java:112)
at org.springframework.boot.test.context.SpringBootTestContextBootstrapper.buildTestContext(SpringBootTestContextBootstrapper.java:78)
at org.springframework.test.context.TestContextManager.<init>(TestContextManager.java:120)
at org.springframework.test.context.TestContextManager.<init>(TestContextManager.java:105)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTestContextManager(SpringJUnit4ClassRunner.java:152)
我的第一个猜测是library
需要依赖application
,但这会导致一个循环。
这个问题有解决办法吗? 如何正确构建我的应用程序?
非常感谢您的建议。
MyLibraryTest
如下所示:
@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional
public class MyLibraryTest {
@Autowired
private MyService service;
@Test
public void testMyService_Save() {...}
}
答案 0 :(得分:0)
您需要确保library
模块pom.xml
包含 -
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<version>1.5.2.RELEASE</version>
</dependency>
是模块使用@SpringBootTest
注释所必需的。您可能已经在app
模块中使用了相同的内容,但未包含在library
模块中。
发布编辑,发现问题可能与Unable to find a @SpringBootConfiguration when doing a JpaTest
重复同样引用托马斯在同一主题here
中的回答关于
@DataJpaTest
和其他一些注释的事情就是它们 在当前包中查找@SpringBootConfiguration
注释, 如果他们在那里找不到,他们就会遍历包层次结构 直到他们找到它。例如,如果您的测试类的完全限定名称是
com.example.test.JpaTest
和你申请的那个是com.example.Application
,然后您的测试类就能找到@SpringBootApplication
(其中,{。}}@SpringBootConfiguration
)。如果应用程序位于包的不同分支中 然而,层次结构,如
com.example.application.Application
,它会 找不到它。
对于您来说似乎就是这种情况,您尝试在不同的模块中测试应用程序。因此,您看到的错误。