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

如何使SpringBoot/Hibernate创建单元测试的模式?

谭翰海
2023-03-14

环境类

SpringBoot 2,H2作为测试依赖项。

生产厂

Jar被部署到云上。DB2服务配置了驱动程序和连接细节,并自动绑定到java应用程序。jar本身没有配置。这就是应用程序。属性文件,但它是空的。这部分工作正常,我希望有一个解决方案存在,它将不需要我创建属性文件和配置文件

“未找到架构xxx”上的本地单元测试崩溃

@Entity(table="Employee", schema="acme")
class Employee {
...
}

@RunWith(SpringRunner.class)
@DataJpaTest
public class EmployeeTest {
...
}
  1. 不存在数据源配置。
  2. SpringBoot看到H2依赖,并默认选择Hibernate。
  3. Hibernate会看到实体定义并尝试先删除表。
  4. 删除使用模式名删除表acme.employee如果存在。未创建架构,因此进程失败,JdbcSQLSynTaxErrorExc0019:未找到架构"acme"
  5. 我尝试了@TestProperty tySource(属性="jdbc: h2: testb; INIT=创建方案如果不存在acme;")没有运气。

我在网上发现了类似的问题和潜在的解决方案。但它们在Hibernate和/或Spring配置文件中的应用非常广泛。我真的很想避免这种情况。这是唯一失败的本地单元测试,所以我希望找到一个包含在测试中的解决方案。

共有2个答案

葛景龙
2023-03-14

做到这一点最简单的方法是使用h2(或hsql),并将ddl auto设置为createdrop。

spring:
  datasource:
    driver-class-name: org.h2.Driver
    password:
    url: jdbc:h2:acme
    username: sa
  jpa:
    database-platform: org.hibernate.dialect.H2Dialect
    hibernate:
      ddl-auto: create-drop
叶举
2023-03-14

如果您的测试需要不同的行为,那基本上是不同的配置文件。尽管您不希望定义属性文件,但下面的解决方案不会深入到配置中,并允许您在测试中非常明确。

  1. 创建应用程序测试。属性(或yml,如果您愿意):
spring.datasource.url = jdbc:h2:mem:testb;init=CREATE SCHEMA IF NOT EXISTS acme;
@SpringBootTest
@ActiveProfiles("test")
class MyTest {
    ...
}
 类似资料:
  • 为了让单元测试跑一个批处理的任务,这个框架必须加载这个任务的ApplicationContext,两个注解的触发方式: @RunWith(SpringJUnit4ClassRunner.class):表明这个类需要使用Spring的测试工具 @ContextConfiguration(locations = {…}):表明哪些xml文件包含ApplicationContext @RunWith

  • 我有以下测试: 这是好的,它可以运行,但是我想知道有没有一种方法可以将它作为单元测试而不是集成测试运行,并且仍然使用@mockbean@autowired。还是我错过了什么? 我试着只保留@ExtendWith(SpringExtension.class),但我得到一个关于找不到BookServiceImpl bean的异常。 我知道如何使用MockitoExtension和@mock、@inje

  • 我已经创建了一个应用程序使用Springboot和Hibernate,我想配置它的单元测试。 首先,这是DAO接口。 这是DAO接口的实现 然后我创建了一个测试类,如下所示 我已经将application.properties文件放在test和src目录的资源中。 我尝试运行此单元测试用例,但由于以下错误而失败: 那么我可以知道为DAO层配置单元测试的最佳方法吗?

  • 需要对项目的控制器部分进行单元测试,但却得到了错误。我相信ModelAndVIew部分导致了这个问题,尽管我曾经嘲弄过它并返回ModelAndVIew,因为它是方法的返回类型。然而,它并不起作用。pom.xml没有任何问题,因此没有添加它。ProjectController: java.lang.IllegalStateException:找不到@SpringBootConfiguration,您

  • 我想测试我的SpringBoot应用程序,它使用cassandra作为CrudRepository。我最终得到了 具有 和 这就导致了 如果我使用旧版本的cassandra-unit-Spring 它以NullPointerException结束,因为没有注入值repo。 来源https://github.com/StephanPraetsch/spring.boot.cassandra.unit

  • 我有创建目录并向其中传输文件的代码。我想对它进行单元测试。但问题是,当我运行单元测试时,这些目录是创建的,但我不希望这样。我希望代码仅在运行生产环境时创建这些目录。我在google上搜索过这个,但所有的搜索结果都表明是JUnit类临时文件夹。但这不是我想要的。我没有在测试用例中创建目录。我只是在测试创建它们的代码。所以我不确定TemporaryFolder类如何帮助我实现这一点。假设我有如下代码