问题标签 [spring-test-dbunit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
976 浏览

database - DBUnit 坚持为未指定的值插入 null,但我希望使用 DB 默认值

我遇到了导致 SQL 插入错误的 DBUnit 问题。假设我的 dbunit testdata.xml 文件中有这个:

我有一张这样的桌子(postgres)

myschema.mytable 有一个 id、value1、value2 和一个日期字段,比如“lastmodified”。lastmodified 列是带有修饰符“not null default now()”的时间戳

似乎 dbunit 读取表元数据并尝试为我的 testdata.xml 文件中未指定的任何列插入空值。所以上面的 xml 会产生这样的插入:

运行测试(dbunit/maven 插件)时,出现如下错误:

有没有办法告诉 DBUnit 不要在我没有指定的字段上插入空值?

编辑:使用 dbunit 2.5.3、junit 4.12、postgressql 驱动程序 9.4.1208

0 投票
2 回答
1579 浏览

java - DbUnit 和 JSON 列类型支持

我想知道使 DbUnit 与 MySQL 的 JSON(B) 类型列一起使用的最佳方法是什么?我们确实在这里和那里有这样的列,每当我试图通过 XML 文件提供测试数据时,@DatabaseSetup我都会得到 NoSuchColumnException,这会阻止我对处理 JSON 的实体或存储库进行任何明智的集成测试:

我知道这是因为我的AEV_CONTEXT列没有被识别,因为它是一个 JSON 列:

但是,我在尝试解决它时遇到了困难。而且,更奇怪的是,我在这里也找不到这样的解决方法!事实上,我不知道这是否更像是 Hibernate 或 DbUnit。

到目前为止真的只有我有这个问题吗?任何建议将不胜感激!

哦,如果你想知道,这就是我如何获得对 Hibernate 的 JSON 支持:

https://vladmihalcea.com/how-to-map-json-objects-using-generic-hibernate-types/

0 投票
0 回答
233 浏览

java - 为什么我的 UUID 列会导致 DBUnit 出现“错误的 Base64 输入字符”?

我有一个带有 UUID 列的 Hibernate DAO 类,当我在我的服务器上针对 mySQL 运行它时工作正常。但是,我正在尝试使用 DBUnit 编写集成测试,但收到一条奇怪的错误消息:

Java类:

DBUnit XML:

如果我将列从 UUID 更改为 String,则一切正常。我已阅读 DBUnit 文档,这就是我认为您在 XML 中定义它的方式。不知道在哪里看,所以非常感谢指针。

DBUnit 2.6.1

0 投票
1 回答
74 浏览

java - 使用 DBUnit 时如何防止数据被删除

我使用带有 liquibase 的 Spring Boot。

问题是当数据库中的特定表中已经有数据并且我尝试在 DBUnit 测试中向该表添加更多数据时,DBUnit 会删除所有数据并仅插入自己的数据。

我举个例子,我已经在数据库中插入了五个作者。不使用 DBUnit 进行测试:

另一个测试我用 DBUnit 再添加一个,但是五个都被删除了,只插入了 DBUnit 中的那些作者:

DBUnit 文件:

如何配置 DBUnit 使其不会删除已经存在的数据,而只是对其进行补充?因为有测试条件,你只需要在已经存在的条目上再添加一个条目

0 投票
4 回答
6656 浏览

java - DBUnit:NoSuchColumnException ColumnNameToIndexes 缓存映射中的非大写输入列。地图的列名不区分大小写

我的 java 应用程序将您的信息存储在 MySql 数据库版本 8 中。用户信息和密码存储在此数据库中。我正在实施一个集成测试来测试使用 dbunit 在数据库中验证用户的方法。测试方法运行后,出现以下错误。

我通过 MySql Workbench 检查了表和列都是以大写创建的,因此显示的错误消息没有意义。有谁知道是什么导致了这个异常?

测试上下文.xml

unitils.properties

在 src/test/dbscripts 中存在文件 001_SCRIPT_01.00.00

/datasets/UserServiceTest.xml

实体

类测试 AccessServiceIT.java

0 投票
1 回答
603 浏览

java - Java DBUnit AmbiguousTableNameException 错误抛出

我正在尝试使用 DBUnit (2.6.0),并且正在尝试导出我的完整数据库 (PostgreSQL)。但是会引发以下异常:

线程“主”org.dbunit.database.AmbiguousTableNameException 中的异常:FLYWAY_SCHEMA_HISTORY

这是正确的行为,因为我有两个具有相同名称的不同模式的表:

在此处输入图像描述

然后我读到您可以设置一个属性Qualified Table Names ( http://dbunit.sourceforge.net/properties.html#qualifiedtablenames ),它将考虑架构名称。所以我现在的代码如下:

问题是我仍然遇到同样的错误,我不知道为什么,因为它应该通过将限定表名设置为 true 来解决?有人知道我做错了什么吗?

0 投票
0 回答
198 浏览

spring-batch - 如何使用 DbUnit 设置 Spring Batch?

我正在尝试使用 dbunit 测试 spring 批处理,但是当批处理运行 HibernateCursorItemReader 时,它在数据库中看不到临时创建的对象。但是,如果我使用 HibernateDaoSupport 创建实体,一切都很好,我可以使用测试数据。有人知道如何强制批量查看我的测试实体吗?

我的测试课程:

并配置 integration-test-context.xml:

0 投票
0 回答
167 浏览

java - 使用 dbunit 仅验证表中的新条目或更新条目

嗨,我在 dbunit 中遇到问题或验证数据集。让我们想象一下我有这样一张桌子

我有这样的测试课:

我想验证新字段是否已添加到数据库中,并且我不想列出initial-dataset.xml我的expected-dataset.xml.

我尝试添加DatabaseAssertionMode.NON_STRICT,但使用此属性 dbunit 仍会检查预期数据集是否包含与实际数据库中用户表中完全相同的数量或行。

另一个解决方案是添加@DatabaseSetup这样的 xml 以进行创建操作:

user在这种情况下,dbunit 将在运行测试之前清理表中的所有内容,在这种情况下,我expected-data.xml应该只包含我的测试执行结果。但在这种情况下,很难验证实际场景中可能发生的不同极端情况。

另一个解决方案是使用 unitils(dbunit 下的某种包装器),但是这个库有很奇怪的 @Dataset 和 @ExpectedDataset 概念

我担心的是,例如,另一个开发人员会更改或添加新条目,initial-dataset.xml然后他需要使用这个新字段更新所有预期数据集。

0 投票
0 回答
103 浏览

maven - 从 springtestdbunit 收集依赖项失败

我有一些问题 Dbunit 并且无法解决。问题是 maven 无法从 dbunit 测试中收集依赖项。这是一个日志错误。

Java 7 Maven 3.6.1

Could not resolve dependencies for project net.tao:DD-sms-delivery-report:jar:1.1: Failed to collect dependencies at com.github.springtestdbunit:spring-test-dbunit:jar:1.3.1: Failed to read artifact descriptor for com.github.springtestdbunit:spring-test-dbunit:jar:1.3.1: Could not transfer artifact com.github.springtestdbunit:spring-test-dbunit:pom:1.3.1 from/to codelds (https://code.lds.org/nexus/content/groups/main-repo): Received fatal alert: handshake_failure -> [Help 1]

和 pom.xml

0 投票
1 回答
95 浏览

spring - 使用 spring-db-unit 运行时如何检查数据库

我们使用 spring-db-unit 运行我们的测试,它是分叉和维护的一个。测试运行良好,可以访问和修改数据。但是当我调试一些测试时,我意识到数据库一直是空的!我的假设是运行者创建一个事务并在测试结束时将其回滚而不是提交。

如何在测试结束时(或任何时候,真的!)检查数据或将其保存在数据库中?


设置:

我们的配置遵循 gibthub 自述文件中的建议设置:

数据库是 PostgreSQL 11.4。上面的DBUnitTestConfig类只是配置PostgresqlDataTypeFactory了 DatabaseConfigBean

切换到TransactionDbUnitTestExecutionListener而不是TransactionalTestExecutionListenerDbUnitTestExecutionListener没有帮助。

我尝试了它DatabaseOperation.INSERT而不是默认的,并将@DatabaseSetup注释移动到测试方法和设置方法上,但没有成功。

我们正在使用以下依赖项。它不是最新的,也是我目前能够升级的最远的:

  1. com.github.ppodgorsek:spring-test-dbunit-core:5.2.0
  2. org.dbunit:dbunit:2.6.0
  3. junit:junit:4.12
  4. org.springframework.boot:spring-boot-starter-parent:1.3.8.RELEASE
  5. 开放JDK 1.8

让我感到困惑的是,我找不到任何人抱怨或配置选项,所以我一定遗漏了一些显而易见的东西!