gpt4 book ai didi

java - 如何在一次测试中测试多个 Spring Boot 应用程序?

转载 作者:行者123 更新时间:2023-12-04 08:54:57 25 4
gpt4 key购买 nike

我有一个带有 2 个 Spring Boot 应用程序的多模块 Maven 项目

parent

  • fooApp
  • barApp
  • 测试

  • 如何设置一个测试,您可以在同一过程中加载单独的 Spring Boot 应用程序,每个应用程序都有自己的配置上下文。
    public abstract class AbstractIntegrationTest {//test module

    protected FOO foo;
    protected BAR bar;

    @RunWith(SpringJUnit4ClassRunner.class)
    @WebAppConfiguration
    @IntegrationTest
    @Transactional
    @SpringApplicationConfiguration(classes = foo.Application.class)
    public class FOO {
    public MockMvc mockMvc;

    @Autowired
    public WebApplicationContext wac;

    @Before
    public void _0_setup() {
    MockitoAnnotations.initMocks(this);
    mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
    TestCase.assertNotNull(mockMvc);
    }

    public void login(String username) {
    }
    }

    @RunWith(SpringJUnit4ClassRunner.class)
    @WebAppConfiguration
    @IntegrationTest
    @Transactional
    @SpringApplicationConfiguration(classes = bar.Application.class)
    public class BAR {

    @Autowired
    public WebApplicationContext wac;

    public MockMvc restMvc;

    @Before
    public void _0_setup() {
    MockitoAnnotations.initMocks(this);
    restMvc = MockMvcBuilders.webAppContextSetup(wac).build();
    TestCase.assertNotNull(restMvc);
    }

    public void login(String username) {
    }
    }

    @Before
    public void _0_setup() {
    foo = new FOO();
    bar = new BAR();
    }
    }

    和一个集成测试的例子
    public class IntegrationTest extends AbstractIntegrationTest {

    @Test
    public void login() {
    foo.login("foologin");
    bar.login("barlogin");
    }

    }

    最佳答案

    给定两个包 com.foo.module1 和 com.foo.module2,您必须为每个包创建一个配置类。
    例如对于模块 1:

    @SpringBootApplication public class Config1 {}

    如果您只想使用单个包的 Spring bean 来运行应用程序,您可以使用 SpringApplicationBuilder 来实现。一个工作片段:
       new SpringApplicationBuilder(com.foo.module1.Config1.class)
    .showBanner(false)
    .run()

    这将使用 Config1 启动 Spring,它仅在其包中搜索(@ComponentScan 包含在 @SpringBootApplication 中)bean。

    如果您想运行完整的应用程序,例如同时所有两个模块,您必须在上层包 com.foo 中创建一个配置类。

    在下面提到的情况下,由于 spring-boot-starters 之类的库,在单个应用程序中运行两个模块可能会以不希望的方式相互干扰,我只能想到两种可能性:
  • 使用 OSGi:这可能无法完全解决问题,而且可能是一个相当复杂的设置或
  • 将应用程序拆分为两个应用程序并创建接口(interface)。 Spring Boot 也是微服务架构的不错选择。
  • 关于java - 如何在一次测试中测试多个 Spring Boot 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34547581/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com