gpt4 book ai didi

java - 在 spring-boot :run 期间启动 MockServer

转载 作者:行者123 更新时间:2023-12-04 13:26:48 24 4
gpt4 key购买 nike

由于防火墙,我们在应用程序中使用了一些 API,这些 API 无法从本地开发人员机器访问。
我想使用 mockServer 来模拟其中一些 API,以便我们可以在本地进行开发。
运行测试时,可以使用 maven 构建阶段启动和停止模拟服务器 process-test-classesverify分别。
当我使用 mvn spring-boot:run 启动应用程序时,如何让它运行? ?

最佳答案

可以在 springboot 上覆盖 bean。
所以你可以使用你的 bean 并根据需要切换模拟值
下面的示例是覆盖服务并根据您的喜好使用模拟,但您也可以使用接口(interface)。
创建服务

@Service
public class ServiceReal {

@Autowired(required = false) // must be required=false. May be disabled by using mock configuration
private JdbcTemplate jdbcTemplate;

public String getInfo() {
return jdbcTemplate...// get a real value from database
}

}
创建模拟服务

@Service
@Primary
@Profile("mocklocal")
public class ServiceMock extend ServiceReal {

@Override
public String getInfo() {
return "Mocked value"
}
}

配置 bean 稍后在属性上选择其中之一
@Profile("mocklocal")
@PropertySource("classpath:application-mocklocal.properties")
@Configuration
public class ConfigMock {

private static final String PROP_VALUE_TRUE = "true";
private static final boolean PROP_FALSE_DEFAULT_MISSING = false;
private static final String PROP_SERVICE_REAL = "mocklocal.service.real";
private static final String PROP_SERVICE2_REAL = "mocklocal.service2.real";

@Bean
@ConditionalOnProperty( value = PROP_SERVICE_REAL, havingValue = PROP_VALUE_TRUE, matchIfMissing = PROP_FALSE_DEFAULT_MISSING)
public ServiceReal serviceReal(){
return new ServiceMock();
}

@Bean
@ConditionalOnProperty( value = PROP_SERVICE2_REAL, havingValue = PROP_VALUE_TRUE, matchIfMissing = PROP_FALSE_DEFAULT_MISSING)
public Service2Real service2Real(){
return new Service2Mock();
}
}
配置您的 application-mocklocal.properties 以使用模拟
# using ConfigMock
spring.profiles.active=mocklocal

# settig spring to override service and use mock
spring.main.allow-bean-definition-overriding=true

# disable some configuration not required in mocks. you can adjust for amqp, database or other configuration
spring.autoconfigure.exclude[0]=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
spring.autoconfigure.exclude[1]=org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
spring.autoconfigure.exclude[2]=org.springframework.boot.autoconfigure.orm.jpa.DataSourceTransactionManagerAutoConfiguration

# enable your service to use mocks not real services
mocklocal.service.real=true
mocklocal.service2.real=true
因此,如果您使用 --spring.profiles.active=mocklocal 启动您的应用程序,您将获得模拟值
你也可以在测试中使用
@ExtendWith(SpringExtension.class)
@AutoConfigureMockMvc
@SpringBootTest
@TestPropertySource(locations = "classpath:application-mocklocal.properties")
public class RunIntegrationTests {

@Autowired
private MockMvc mockMvc;

@Test
public void run() throws Exception{
...
}
}

关于java - 在 spring-boot :run 期间启动 MockServer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67942535/

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