当前位置: 首页 > 知识库问答 >
问题:

测试时使用数据源进行Spring Boot

毋胜涝
2023-03-14

我正在使用Spring Boot应用程序,自动配置已启用。主应用程序文件标记为@EnableAutoConfiguration。数据源是lookedup,JNDI使用java配置进行配置,创建数据源的类被标记为@Configuration

我有一个测试类如下。

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

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

目前我发现的解决方法是使用DriverManager datasource创建数据源,而不是JNDI查找,这样即使不是服务器环境,数据源查找也不会失败。

我的问题是:

1) 在spring boot应用程序测试中,我们通常如何处理数据源(从JNDI中查找时)?

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

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

共有1个答案

夹谷信鸿
2023-03-14

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

您可以添加应用程序。属性config文件放入src/test/resources中,spring boot将在测试环境中选择这些配置。我想,你有应用程序。在src/main/resources中的属性如下:

spring.datasource.jndi-name=some_jndi

这个JNDI资源将在您的生产环境中使用。对于您的测试环境,您可以使用MySQL数据库,方法是将这些配置添加到您的测试应用程序中。属性

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

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

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

1) 在spring boot应用程序测试中,我们通常如何处理数据源(从JNDI中查找时)?

您可以使用org中提供的工具模拟JNDI资源。springframework。嘲弄jndi软件包。例如,通过使用SimpleNameContextBuilder可以:

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

当然,另一种选择是在测试环境中使用非JNDI资源。

 类似资料:
  • 我有一个与Hibernate集成的Spring Boot应用程序,用于数据库持久性。 null 我怎么能那么做? 谢了。

  • 我正在用Cucumber编写验收测试,我想使用H2数据库进行测试。 应用程序测试属性如下所示: 在目录resources/db/migration中,我有一个包含这些脚本的sql文件: 但是当我运行测试时,H2用默认格式创建模式,而不是使用脚本: 如您所见,所有VARCHAR都是使用255大小创建的,而不是真实值。 你能帮我把飞行道和H2整合起来吗? 谢谢!

  • 问题内容: 您如何在jUnit中编写数据驱动的测试? (我的定义)数据驱动测试是一种从某些外部源(文件,数据库等)读取数据,每行/文件/任何内容执行一个测试,并将结果显示在测试运行程序中的测试,就像您进行了单独的测试- 每次运行的结果将单独显示,而不是汇总显示。 问题答案: 在JUnit4中,您可以使用Parameterized testrunner进行数据驱动的测试。 它的文档记录不是很好,但是

  • 我有一个在mySQL上运行的小型数据库应用程序。 我想使用H2进行测试。 我向build.gradle添加了必要的依赖项: runtimeOnly’com。h2数据库:h2' 然而,我注意到,在完成测试之后,我的mySQL数据库包含测试期间生成的字段,就好像spring没有使用H2一样。 有什么问题吗?

  • 我想用Selenium和TestNG来模拟谷歌搜索,同时使用各种搜索参数。下面是我的测试类和testng。xml。我已经使用下面的注释

  • 我试图测试一个基于Spring引导的Restendpoint。代码能够返回预期的输出,但测试失败,错误如下: 已解析[org.springframework.http.converter.HttpMessageNotWritableException:预设内容类型为“null”的[class java.util.LinkedList]没有转换器 对此有任何想法都将不胜感激! 下面是相同的代码: 控