Her*_*arn 10 java spring spring-boot
我正在使用Spring Boot应用程序并启用了自动配置.主应用程序文件标记为@EnableAutoConfiguration.使用java config配置从JNDI查找的数据源,并将创建数据源的类标记为@Configuration.
我有一个测试类如下.
@RunWith( SpringJUnit4ClassRunner.class )
@WebAppConfiguration
@ContextConfiguration( classes = Application.class )
public class TestSomeBusiness {}
Run Code Online (Sandbox Code Playgroud)
问题是,当我运行测试用例时,数据源jndi查找发生,由于测试用例未在服务器环境中运行,因此失败.据我所知,标记的classpath中的类@Configuration被执行,并且是调用数据源查找的原因.
我现在找到的解决方法是使用创建数据源而不是JNDI查找DriverManagerDataSource,这样即使它不是服务器环境,数据源查找也不会失败.
我的问题是:
1)我们如何处理弹簧启动应用程序中的数据源(从JNDI查找时)以进行测试?
2)有没有办法在执行测试用例时排除数据源配置类被调用?
3)我应该创建一个嵌入式服务器,以便在执行测试用例时可以完成JNDI查找吗?
2)有没有办法在执行测试用例时排除数据源配置类被调用?
您可以将application.properties配置文件添加到您的src/test/resources弹簧启动中,然后在测试环境中选择这些配置.我想,你有application.properties你src/main/resources这样的:
spring.datasource.jndi-name=some_jndi
Run Code Online (Sandbox Code Playgroud)
此JNDI资源将在您的生产环境中使用.对于您的测试环境,您可以使用MySQL数据库,将这些配置添加到测试中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
Run Code Online (Sandbox Code Playgroud)
3)我应该创建一个嵌入式服务器,以便在执行测试用例时可以完成JNDI查找吗?
正如我所说的那样,您可以JNDI通过添加特定于测试的配置来完全绕过您用于生产的事实.
1)我们如何处理弹簧启动应用程序中的数据源(从JNDI查找时)以进行测试?
您可以JNDI使用org.springframework.mock.jndi包中提供的工具来模拟资源.例如,使用SimpleNamingContextBuilder您可以:
SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder();
builder.bind("jndi_name", dataSource);
builder.activate();
Run Code Online (Sandbox Code Playgroud)
当然,另一种选择是Non JNDI在测试环境中使用资源.
| 归档时间: |
|
| 查看次数: |
11810 次 |
| 最近记录: |