Spring Boot:如何跳过数据源配置 运行 测试
Springboot : How to skip datasource configuration running tests
我有一个运行完美的简单 Springboot 应用程序。
我的问题是我做了一些测试,这些测试在我的电脑上 运行 很好,但在 Jenkins 上却不行。
原因是我有 2 个数据源受防火墙保护。我电脑上的一点 "mvn clean install" 可以工作,因为它的 IP 是可信的,而 Jenkins 的 IP 不是也不可能是。
我的测试不需要数据源(所有内容都是模拟的)但是当加载应用程序上下文时,由于数据库连接超时(->防火墙)而失败
如何在执行测试时跳过数据库部分?我尝试使用配置文件但没有成功...
提前感谢您的回复 ;-)
这是我申请的主要 classes
MyApp.java
@SpringBootApplication
@ComponentScan
@EnableAutoConfiguration(exclude={JpaRepositoriesAutoConfiguration.class,
DataSourceAutoConfiguration.class})
@PropertySources({
@PropertySource(MyApp.CLASSPATH_APPLICATION_PROPERTIES)
})
public class MyApp extends SpringBootServletInitializer {
public static final String CLASSPATH_APPLICATION_PROPERTIES = "classpath:/application-${spring.profiles.active}.properties";
....
}
FirstDataSourceConfig.java(另一个数据源有第二个class)
@Configuration
@Profile("prod")
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "dbFirstEntityManager",
transactionManagerRef = "dbFirstTransactionManager",
basePackages = {"my.package.for.dao"})
public class FirstDataSourceConfig {
// Definition of LocalContainerEntityManagerFactoryBean, DataSource and Transaction manager
}
AbstractTest.java
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = {MyApp.class})
@ActiveProfiles("dev")
public class AbstractTest {
protected Logger LOGGER = Logger.getLogger(this.getClass());
}
AbstractControllerTest.java
@WebAppConfiguration
public class AbstractControllerTest extends AbstractTest {
protected MockMvc mvc;
@Autowired
protected WebApplicationContext webApplicationContext;
protected void setUp() {
mvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
....
}
好的,经过再次测试,我找到了解决问题的方法....
我创建了一个 "application test class"
@SpringBootApplication
public class MyAppTests {
public static void main(String[] args) {
SpringApplication.run(MyAppTests.class, args);
}
}
我将 @SpringApplicationConfiguration 的 class 更改为使用 MyAppTests
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = {MyAppTests.class})
@ActiveProfiles("dev")
public class AbstractTest {
protected Logger LOGGER = Logger.getLogger(this.getClass());
}
我还必须向我的 pom.xml 添加依赖项以添加嵌入式数据库
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<scope>runtime</scope>
</dependency>
我有一个运行完美的简单 Springboot 应用程序。 我的问题是我做了一些测试,这些测试在我的电脑上 运行 很好,但在 Jenkins 上却不行。
原因是我有 2 个数据源受防火墙保护。我电脑上的一点 "mvn clean install" 可以工作,因为它的 IP 是可信的,而 Jenkins 的 IP 不是也不可能是。
我的测试不需要数据源(所有内容都是模拟的)但是当加载应用程序上下文时,由于数据库连接超时(->防火墙)而失败
如何在执行测试时跳过数据库部分?我尝试使用配置文件但没有成功...
提前感谢您的回复 ;-)
这是我申请的主要 classes
MyApp.java
@SpringBootApplication
@ComponentScan
@EnableAutoConfiguration(exclude={JpaRepositoriesAutoConfiguration.class,
DataSourceAutoConfiguration.class})
@PropertySources({
@PropertySource(MyApp.CLASSPATH_APPLICATION_PROPERTIES)
})
public class MyApp extends SpringBootServletInitializer {
public static final String CLASSPATH_APPLICATION_PROPERTIES = "classpath:/application-${spring.profiles.active}.properties";
....
}
FirstDataSourceConfig.java(另一个数据源有第二个class)
@Configuration
@Profile("prod")
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "dbFirstEntityManager",
transactionManagerRef = "dbFirstTransactionManager",
basePackages = {"my.package.for.dao"})
public class FirstDataSourceConfig {
// Definition of LocalContainerEntityManagerFactoryBean, DataSource and Transaction manager
}
AbstractTest.java
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = {MyApp.class})
@ActiveProfiles("dev")
public class AbstractTest {
protected Logger LOGGER = Logger.getLogger(this.getClass());
}
AbstractControllerTest.java
@WebAppConfiguration
public class AbstractControllerTest extends AbstractTest {
protected MockMvc mvc;
@Autowired
protected WebApplicationContext webApplicationContext;
protected void setUp() {
mvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
....
}
好的,经过再次测试,我找到了解决问题的方法.... 我创建了一个 "application test class"
@SpringBootApplication
public class MyAppTests {
public static void main(String[] args) {
SpringApplication.run(MyAppTests.class, args);
}
}
我将 @SpringApplicationConfiguration 的 class 更改为使用 MyAppTests
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = {MyAppTests.class})
@ActiveProfiles("dev")
public class AbstractTest {
protected Logger LOGGER = Logger.getLogger(this.getClass());
}
我还必须向我的 pom.xml 添加依赖项以添加嵌入式数据库
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<scope>runtime</scope>
</dependency>