我有一个简单的Springboot应用程序,可以完美运行。 我的问题是我做了一些测试,这些测试在我的电脑上运行良好,但在Jenkins上没有。
原因是我有两个受防火墙保护的数据源。一点点" mvn clean install"在我的电脑上工作,因为它的IP是可信的,而詹金斯'一个不是也不可能。
我的测试不需要数据源(一切都被模拟)但是当加载应用程序上下文时,由于数据库连接超时而失败( - >防火墙)
如何在执行测试时跳过数据库部分?我尝试使用Profiles但没有成功......
提前感谢您的回复; - )
以下是我的应用程序的主要类
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 (其他数据源有第二个类)
@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();
}
....
}
答案 0 :(得分:1)
好的,经过另一次测试,我找到了解决问题的方法.... 我创建了一个"应用程序测试类"
@SpringBootApplication
public class MyAppTests {
public static void main(String[] args) {
SpringApplication.run(MyAppTests.class, args);
}
}
我更改了@SpringApplicationConfiguration的类以使用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>