当前位置: 首页 > 知识库问答 >
问题:

使用Multi Maven Project Setup测试Spring Boot应用程序的问题

秋和雅
2023-03-14

我目前遇到了一些关于spring boot和MultiMaven项目结构的问题。我使用的是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)

应用程序模块依赖于

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() {...}

    }

共有1个答案

谭兴学
2023-03-14

您需要确保Library模块的pom.xml包含-

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-test</artifactId>
    <version>1.5.2.RELEASE</version>
</dependency>

这是模块使用@springboottest注释所必需的。您可能已经在app模块中使用了相同的内容,但未包含在Library模块中。

我们发布了编辑,发现问题可能是在执行JpaTest时无法找到@SpringBootConfiguration的重复

同样引用托马斯在同一条线上的回答,这里

关于@datajpatest和其他一些注释的一点是,它们在当前包中查找@springbootconfiguration注释,如果在那里找不到,它们就遍历包层次结构,直到找到为止。

例如,如果测试类的完全限定名是com.example.test.jpatest,而应用程序的完全限定名是com.example.application,那么测试类将能够找到@SpringBootApplication(以及其中的@SpringBootConfiguration)。

但是,如果应用程序位于包层次结构的不同分支中,如com.example.application.application,它将找不到它。

这似乎是您的情况,您试图在不同的模块中测试应用程序本身。因此出现了您看到的错误。

 类似资料:
  • 使用spring-boot时,一切工作都很好。尽管如此,在spring-boot中已删除了注释和。我试图将代码重构为新版本,但我做不到。对于以下测试,我的应用程序在测试之前没有启动,http://localhost:8080返回404: 如何重构测试以使其在Spring-Boot1.5中工作?

  • 我整天都在尝试运行JSF应用程序的JMeter测试。我知道,但这似乎是一个非常简单的问题。我准备了正则表达式提取器: 以下采样器是用代理和记录创建的。 第一个请求。这是将从中提取ViewState的请求。 请求其中<代码>${jsfviewstee}被传递到 第二个请求在本例中非常重要。 结果是: 首先。在右边我们可以看到ViewState的值。 ,它显示jsfViewState值是正确的。我们可

  • 集成测试: 当我偶尔运行这个测试时,一切都很好,但是当我和其他测试一起运行它时,没有使用模拟的ServerThroughRabbitMQ,所以一些spring缓存强制使用旧的rabbit侦听器。 我试图调试它,我可以看到,正确的bean被autowired到测试中,但由于某些原因旧监听器使用(旧bean字段instanceID=1新mocked bean instanceID=3),测试失败(不确

  • 我有一个springboot应用程序,我试图使用ByteBuddy来测试它。我遇到了类路径问题,我无法理解。 首先,以下是关于这方面的其他文献: https://github.com/raphw/byte-buddy/issues/473 这里需要注意的一点是,如果我使用IntelliJ运行应用程序,它不会使用uber-jar,而是通过main类运行,其中有一堆JAR作为类路径参数。 由于这种差异

  • 我的SpringBoot应用程序中有一个控制器: 我想在mocks的帮助下,将其与服务分开进行测试。如何实施?

  • 问题内容: 实际上,我有两个有关Android错误的相关问题。我发布了一个应用程序的更新,该应用程序以前可以正常运行,并且可以在Nexus One,G1和模拟器上以当前版本运行。但是,自从上次更新以来,我通过Android市场控制台收到了很多错误日志,并且无法重现该错误。该应用程序非常简单,只有两个活动,因此手动测试该应用程序应该非常容易。但是,在发布之前,经常会发现一些我找不到的错误。 所以第一

  • 根据这个链接,我可以创建一个测试应用程序,Robolectric将自动开始在测试中使用它。我不能让它运转起来。 我正在使用Dagger进行依赖注入,并为和创建了注入包装类。那么我的每个活动都扩展了包装器活动类,而不是简单的旧。