Springboot:如何跳过运行测试的数据源配置

时间:2015-09-16 12:25:41

标签: java testing jenkins spring-boot datasource

我有一个简单的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();
    }
    ....
}

1 个答案:

答案 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>