测试时使用数据源进行Spring

测试时使用数据源进行Spring

本文介绍了测试时使用数据源进行Spring Boot的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Spring Boot应用程序并启用了自动配置。主应用程序文件标记为 @EnableAutoConfiguration 。从JNDI查找的数据源是使用java config配置的,创建数据源的类标记为 @Configuration



我有一个测试类如下。

  @RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes = Application.class)
public class TestSomeBusiness {}

问题当我运行测试用例时,会发生数据源jndi查找,但由于测试用例未在服务器环境中运行而失败。据我所知,标记为 @Configuration 的类路径中的类被执行,并且是调用数据源查找的原因。



我现在找到的解决方法是使用 DriverManagerDataSource 来代替JNDI查找创建数据源,这样即使它不是服务器环境,数据源查找也会赢得'失败。



我的问题是:



1)我们如何处理数据源(查找时)来自JNDI)在
spring boot应用程序中进行测试?



2)有没有办法在执行测试用例时排除数据源配置类被调用? / p>

3)我应该创建一个嵌入式服务器,以便在执行测试用例时可以完成JNDI查找吗?

解决方案

正如我所说,你可以通过添加测试特定配置完全绕过你使用 JNDI 进行生产的事实。

You can add a application.properties config file into your src/test/resources and spring boot would pick those configurations in test environments. I suppose, you have application.properties in your src/main/resources like this:

spring.datasource.jndi-name=some_jndi

This JNDI resource will be used in your production environment. For your test environment you can use a, say MySQL database, by adding these configurations into your test application.properties:

spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

As i said, you can totally bypass the fact that you're using JNDI for production by adding test specific configurations.

You can mock JNDI resources using facilities available in org.springframework.mock.jndi package. For example by using SimpleNamingContextBuilder you can:

SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder();
builder.bind("jndi_name", dataSource);
builder.activate();

The other option is, of course, using Non JNDI resources in test environments.

这篇关于测试时使用数据源进行Spring Boot的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-06 02:59