标签: dbunit

DBUnit数据集按主键集导出

我尝试使用以下方法通过一组素数键从oracle数据库导出数据集:

TablesDependencyHelper.getDataset(connection, fullTableName , 
                    new TreeSet(Arrays.asList(
                        new BigDecimal[]{new BigDecimal(1)})));
Run Code Online (Sandbox Code Playgroud)

这会抛出一个45mb的数据文件!!!,检查文件我意识到问题是对带有复合键(6个外键)的表的引用,而不是导出唯一引用的注册表,它占用了整个表数据.¿我认为这是DBUnit的错误,任何人都知道这个方法的解决方案?

java dbunit

5
推荐指数
1
解决办法
1231
查看次数

在表上打开IDENTITY_INSERT以使用DB Unit加载它

我尝试使用DB Unit加载具有标识列的表.我希望能够自己设置id值(我不希望数据库为我生成它).

这是我的表的最小定义

create table X (
 id numeric(10,0) IDENTITY PRIMARY KEY NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

要在X中插入一行,我执行以下SQL

set INDENTITY_INSERT X ON
insert into X(id) VALUES(666)
Run Code Online (Sandbox Code Playgroud)

没问题.但是当我尝试使用以下数据库单元XML数据集(RS_7_10_minimal_ini.xml)加载此表时

<dataset>
 <X id="666"/>
</dataset>
Run Code Online (Sandbox Code Playgroud)

使用以下最小JUnit(DBTestCase)测试用例:

package lms.lp.functionnal_config;

import java.io.FileInputStream;
import org.dbunit.DBTestCase;
import org.dbunit.PropertiesBasedJdbcDatabaseTester;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSetBuilder;
import lms.DBUnitConfig;
import org.junit.Test;

public class SampleTest extends DBTestCase

{

public SampleTest(String name)

{
    super( name );
    System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS, DBUnitConfig.DBUNIT_DRIVER_CLASS );
    System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL, DBUnitConfig.DBUNIT_CONNECTION_URL );
    System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME, DBUnitConfig.DBUNIT_USERNAME );
    System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD, DBUnitConfig.DBUNIT_PASSWORD );

}

protected IDataSet getDataSet() throws …
Run Code Online (Sandbox Code Playgroud)

sybase junit dbunit identity-insert identity-column

5
推荐指数
1
解决办法
4793
查看次数

JUnit + DbUnit:在开发和测试环境之间切换数据库连接

我正在围绕现有项目设置一些测试脚手架.这包括使用JUnit和DbUnit的一些集成测试.我还设置了Jenkins安装以进行持续集成.

我的问题涉及更改开发和测试环境之间的数据库连接.我在本地安装了自己的产品堆栈,以便进行快速的临时测试和调查.在我开发的时候,我对我的私人数据库运行测试,因为它更快,我不会因为有问题的工作进程代码而毁掉任何其他人的日子.

签入代码后,Jenkins将运行我的测试.现在它仍然指向我的本地数据库.我更愿意让Jenkins针对不同的数据库运行测试,这个数据库位于测试环境中.

是否有最佳实践/策略/技术/等更改数据库连接以进行测试而无需更改代码?如果解决方案允许Jenkins对多个DB运行相同的测试,那么奖励点(应该是可能的,因为DbUnit是不可知的).


编辑更多信息:

该产品很大,具有许多不同的交互组件(通常在单独的vms /进程中).在实时系统中,不同的进程通常通过数据库进行通信.IE,UI进程将更改写入表,后端进程轮询该表以进行更改.是的,太可怕了.对于集成测试,我使用UI配置系统并使用DbUnit捕获该状态.然后,我可以针对该"输入"运行测试.

我的组件和所有新组件都由maven管理.数据库连接当前在测试设置中是硬编码的.DbUnit系统有效; 我只是希望能够切换我的测试引用的数据库,具体取决于它们是在我的开发环境中运行,还是由Jenkins在测试环境中运行.

java testing junit dbunit development-environment

5
推荐指数
1
解决办法
4025
查看次数

数据库单元应忽略行的顺序

有没有办法让DB-Unit忽略比较行的顺序?我的问题是,我不知道行将以哪种顺序写入数据库,但DB-Unit迫使我给出一个有序列表.

我想要dbunit做的是:

  • 检查数据库和预期数据集中的行数是否匹配(已解决:开箱即用
  • 检查每个行是否只在结果集中找到一次.(未解决)

有任何想法吗?

java database testing dbunit

5
推荐指数
1
解决办法
2482
查看次数

从Maven命令行获取HSQL连接时,JPA测试挂起

测试在Eclipse中单独工作(右键单击,以Junit身份运行),但是当我使用maven从命令行运行它们时,它会在尝试获取与HSQL数据库的DataSource连接时停止.

LogicalConnectionImpl [DEBUG] Obtaining JDBC connection
Run Code Online (Sandbox Code Playgroud)

对我来说最奇怪的部分是,如果我将测试限制为10(不是类,而是单独的@Test方法),它将起作用.但是,一旦进行了第11次测试,就会爆炸.测试组合没关系,所以如果我有30个测试,并且我选择运行11个或更多,那么它将失败.这让我觉得它是一个DataSource连接最大问题,但到目前为止还没有运气细节.我已经尝试添加堆大小只是为了咯咯笑,但这不起作用.

因此,在此挂起之前,我有多个成功的JDBC连接和发布.

这是我的applicationContext-HSQL.xml,它用于Eclipse和Command Line版本.我知道b/c我通过弄乱下面的Class值强迫他们每个人失败.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:flow="http://www.springframework.org/schema/webflow-config"
       xmlns:lang="http://www.springframework.org/schema/lang"
       xmlns:osgi="http://www.springframework.org/schema/osgi"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:util="http://www.springframework.org/schema/util"
       xmlns:p="http://www.springframework.org/schema/p"

       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
          http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
          http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
          http://www.springframework.org/schema/webflow-config http://www.springframework.org/schema/webflow-config/spring-webflow-config-2.0.xsd
          http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-3.0.xsd
          http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi-3.0.xsd
          http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
          http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">

    <context:annotation-config/>
    <context:component-scan base-package="com.company"/>

    <import resource="classpath*:/application-context-cxf.xml"/>

     <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="persistenceXmlLocation" value="META-INF/persistence.xml"  />
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="showSql" value="false" />
                <property name="generateDdl" value="false" />
                <property name="databasePlatform" value="org.hibernate.dialect.HSQLDialect" />
            </bean>
        </property>
    </bean>

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property …
Run Code Online (Sandbox Code Playgroud)

spring dbunit jpa datasource hsqldb

5
推荐指数
1
解决办法
1125
查看次数

处理DBUnit中的保留字符

我在集成测试期间使用DBUnit来模拟我继承的传统Spring/Hibernate项目的数据.不幸的是很久以前有人认为拥有一个名为user的用户表会很好,这是我们数据库中的保留关键字.然后通过将实体表映射重命名为现在已经存在多年的`user`来解决这个问题.

正如我现在几年后开始整合集成测试一样,这就产生了一个问题,因为DBUnit不允许在其xml数据集文件中使用`字符(它是你知道的XML ...),而CSV读取器则要求文件是称为`user`.csv,在我的操作系统下似乎失败了.

有没有办法在不使用DBUnit的XML或CSV读取器的情况下添加此表,还是应该从另一个角度解决这个问题?一种替代方法是在集成测试期间使用另一个映射,以便我可以将表命名为它的预期名称(用户).但我不知道这是否可行.

我已经打了2天了,所以我喜欢一些外部反馈.

所以,只是澄清一下.我有一个实体,如:

@Entity (name = "`user`")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Auditable
public class User implements UserDetails, Serializable {
  properties etc....
Run Code Online (Sandbox Code Playgroud)

在我的集成测试期间,hibernate通过配置persistence.xml文件来负责创建其他表.当dbunit然后尝试填充数据时,由于缺少表而导致错误,无论我如何尝试转义用户表名.

java junit dbunit integration-testing hibernate

5
推荐指数
1
解决办法
1016
查看次数

替代现在放弃的dbunit扩展?

因此,我可以使用PHPUnit测试使用数据库的代码,我刚刚使用Composer 安装了DbUnit扩展,并且得到以下消息:

软件包phpunit / dbunit被放弃了,您应该避免使用它。没有建议更换。

我已经看到了扩展名被放弃的问题,人们谈论着滚动自己的数据库测试代码,但是他们没有涉及更多细节。有没有推荐的方法可以使用PHPUnit测试数据库代码,或者有人知道任何示例吗?

(我确实提出了一个问题,并向PHPUnit的作者询问了这个问题,但是他的回答很迅速,而且很直截了当地-“不,没有。”):-/

phpunit dbunit unit-testing

5
推荐指数
0
解决办法
385
查看次数

集成测试 - Hibernate和DbUnit

我正在JUnit中编写一些集成测试.这里发生的是当我连续一起运行所有测试(而不是单独)时,数据库中持久存储的数据总是会发生变化,测试会在执行期间发现意外数据(由前一个测试插入).

我正在考虑使用DbUnit,但我想知道它是否重置每次执行之间的自动增量索引(因为测试还会检查持久化实体的ID).

谢谢

M.

java orm dbunit integration-testing hibernate

4
推荐指数
1
解决办法
3181
查看次数

DBUnit - 完整性约束违规:外键无动作; SYS_FK_10556

我目前正在使用dbunit进行编码测试(使用hsqldb).但是,我在初始化db时遇到了很大的问题:

这是代码:

/**
     * Init before a test starts
     */
    @Before
    public void initialise() {
        IDataSet dataSetRating = null;
        IDataSet dataSetMovie = null;

        log.info("enter init test");

        try {
            con = datasource.getConnection();
            icon = new DatabaseConnection(con);
            File rating = new File("./src/test/resources/startDatabaseRating.xml");         
            dataSetRating = new FlatXmlDataSetBuilder().build(rating);
            DatabaseOperation.CLEAN_INSERT.execute(icon, dataSetRating);
        } catch (Exception e) {
            e.printStackTrace();
            log.error(e);
            System.exit(-1);
        }
    }
Run Code Online (Sandbox Code Playgroud)

我的create语句看起来像这样:

CREATE TABLE Rating
(
    rid INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    mid INTEGER FOREIGN KEY REFERENCES Movie(movieId), 
    rating INTEGER NOT NULL, …
Run Code Online (Sandbox Code Playgroud)

java database eclipse dbunit unit-testing

4
推荐指数
1
解决办法
2万
查看次数

DbUnit @DatabaseTearDown注释:如何只删除某些记录?(使用@DatabaseSetup注释插入的那些)

我试图只删除我使用@DatabaseSetup注释插入的记录.

我的测试看起来像这样:

@Test
@DatabaseSetup("classpath:data-set.xml")
@DatabaseTearDown(value={"classpath:data-set.xml"}, type= DatabaseOperation.DELETE)
public void testSomething() throws Exception {
Run Code Online (Sandbox Code Playgroud)

数据set.xml

<?xml version="1.0" encoding="UTF-8"?>
<dataset>
    <person id="1" name="Joe"/>
</dataset>
Run Code Online (Sandbox Code Playgroud)

据推测,使用DatabaseOperation.DELETE意味着"删除与数据集中的行匹配的数据库表行".但是当我执行测试时,它会擦除​​表格中的所有数据.

我认为问题是用于拆卸的xml文件的格式.我尝试使用不同的格式:

首先尝试使用tear-down.xml

<?xml version="1.0" encoding="UTF-8"?>
<dataset>
    <person id="1"/>
</dataset>
Run Code Online (Sandbox Code Playgroud)

第二次尝试使用tear-down.xml

<?xml version="1.0" encoding="UTF-8"?>
<dataset>
    <person/>
</dataset>
Run Code Online (Sandbox Code Playgroud)

无论使用何种格式,它总是删除表中的所有数据.我找不到用于拆除的格式的单个例子,而不是简单地列出表名.在大多数示例中,人们似乎都使用相同的xml文件进行设置和拆卸.

但这必须是可能的,不是吗?

dbunit spring-test-dbunit

4
推荐指数
1
解决办法
8059
查看次数