【问题标题】:Springboot : How to skip datasource configuration running testsSpring Boot:如何跳过数据源配置运行测试
【发布时间】:2015-09-16 12:25:41
【问题描述】:

我有一个运行良好的简单 Springboot 应用程序。 我的问题是我做了一些在我的计算机上运行良好但在 Jenkins 上运行良好的测试。

原因是我有 2 个受防火墙保护的数据源。在我的计算机上进行一点“mvn clean install”是有效的,因为它的 IP 是受信任的,而 Jenkins 的 IP 不是而且不可能。

我的测试不需要数据源(一切都是模拟的),但是当加载应用程序上下文时,由于数据库连接超时(->防火墙)而失败

执行测试时如何跳过数据库部分?我尝试使用个人资料但没有成功...

提前感谢您的回复 ;-)

这是我的应用程序的主要类

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();
    }
    ....
}

【问题讨论】:

    标签: java testing jenkins spring-boot datasource


    【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-01
      • 2015-03-21
      • 2016-01-17
      • 2015-01-26
      • 2017-06-25
      • 1970-01-01
      相关资源
      最近更新 更多