标签: dbunit

多模块Java/Maven项目中DBUnit的XML DTD路径?

我有一个多模块maven项目.在persist模块中,我有许多引用DTD的XML文件数据文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE myapp-data SYSTEM "myapp-data.dtd" >

<dataset>
      .....omitted for brevity....
</dataset>
Run Code Online (Sandbox Code Playgroud)

DTD与XML文件存储在同一目录中,甚至Eclipse也将这些XML文件报告为有效.

但是,当我运行应用程序时,DBUnit FlatXMLDataSet会抛出FileNotFound异常,因为它无法找到DTD.它显然在根项目目录中寻找DTD(例如myproject /).我原以为它会在与XML文件本身相同的目录中查找DTD(例如myproject/persist/target/test-data).

看看DBUnit的源代码,就可以说"相对DOCTYPE uri是从当前工作的dicrectory中解决的".

有什么好办法解决这个问题?

xml dbunit dtd maven-2

9
推荐指数
1
解决办法
4069
查看次数

Oracle + dbunit获取AmbiguousTableNameException

我使用dbunit创建数据库备份,可以导入和导出.我的应用程序可以使用几个数据库引擎:MySQL,PostgreSQL,SQLServer,H2和Oracle.

所有上述工作都可以使用以下代码:

            // Connect to the database 
        conn =BackupManager.getInstance().getConnection();
        IDatabaseConnection connection = new DatabaseConnection(conn);
        InputSource xmlSource = new InputSource(new FileInputStream(new File(nameXML)));
        FlatXmlProducer flatXmlProducer = new FlatXmlProducer(xmlSource);
        flatXmlProducer.setColumnSensing(true);

        DatabaseOperation.CLEAN_INSERT.execute(connection,new FlatXmlDataSet(flatXmlProducer));  
Run Code Online (Sandbox Code Playgroud)

但在Oracle上我得到了这个例外:

!ENTRY es.giro.girlabel.backup 1 0 2012-04-11 11:51:40.542
!MESSAGE Start import backup
org.dbunit.database.AmbiguousTableNameException: AQ$_SCHEDULES
    at org.dbunit.dataset.OrderedTableNameMap.add(OrderedTableNameMap.java:198)
    at org.dbunit.database.DatabaseDataSet.initialize(DatabaseDataSet.java:231)
    at org.dbunit.database.DatabaseDataSet.getTableMetaData(DatabaseDataSet.java:281)
    at org.dbunit.operation.DeleteAllOperation.execute(DeleteAllOperation.java:109)
    at org.dbunit.operation.CompositeOperation.execute(CompositeOperation.java:79)
    at es.giro.girlabel.backup.ImportBackup.createData(ImportBackup.java:39)
    at es.giro.girlabel.backup.handlers.Import.execute(Import.java:45)
Run Code Online (Sandbox Code Playgroud)

java sql database oracle dbunit

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

@DatabaseSetup无法加载数据集

我通过java配置配置了我的测试环境.在我的测试中,我需要一些数据来预先运行它,但是当我使用@DatabaseSetup注释运行测试时,我总是得到错误

Unable to load dataset from "personTestData.xml" using class com.github.springtestdbunit.dataset.FlatXmlDataSetLoader
Run Code Online (Sandbox Code Playgroud)

该文件位于src/test/resources/personTestData.xml.出于好奇,我将文件移动到测试本身所在的同一个包中,仍然是同样的错误.

我花了无数个小时在网上搜索错误,直到现在都没有解决方案.

UPDATE

我使用的组件和版本:

junit: 4.12
hamcrest: 1.3
springtestdbunit: 1.2.1
dbunit: 2.5.0
bonecp: 0.8.0
hsqldb: 1.8.0.10
Run Code Online (Sandbox Code Playgroud)

我的xml

<?xml version="1.0" encoding="UTF-8"?>

<dataset>
    <person id="uuid'da578845-356c-4c99-9bda-c288c88e7b55" 
            dateCreated="2015-03-24 10:54:00"
            isEnabled="1"
            city="Graz"
            displayName="42"
            email="dent@example.com"
            firstname="Arthur"
            lastname="Dent"
            phone="01123456"
            street="Waßkannergasse 16"
            web="www.vdsoft.at"
            zip="1010"/>

    <person id="uuid'5aaae7dd-b84f-463e-a534-e7b2bc54752a" 
            dateCreated="2015-03-24 10:54:10"
            isEnabled="1"
            city="Graz"
            displayName="Towel"
            email="prefect@example.com"
            firstname="Ford"
            lastname="Prefect"
            phone="01123856"
            street="Waßkannergasse 45"
            web="www.vdsoft.at"
            zip="1010"/>

    <person id="uuid'b770b982-3a59-4292-9fd8-715afa2c1bef" 
            dateCreated="2015-03-24 10:54:20"
            isEnabled="1"
            city="Graz"
            displayName="Lemon"
            email="beeblebrox@example.com"
            firstname="Zaphod"
            lastname="Beeblebrox"
            phone="01125456"
            street="Waßkannergasse 20"
            web="www.vdsoft.at"
            zip="1010"/> …
Run Code Online (Sandbox Code Playgroud)

java spring dbunit spring-test-dbunit

9
推荐指数
1
解决办法
7660
查看次数

DBUnit自动生成数据集

我在StackOverflow上看到了有关在DbUnit中创建数据集的几个问题,但所有问题都与现有表中的导出数据有关.

我的问题是,DBUnit可以根据我的数据库模式创建一些虚拟数据集吗?我不关心字符串是否会像"ZDSFFDSDGF",而BLOBS只是垃圾.我只需要一些测试数据,我宁愿花时间开发而不是填充表格.

任何解决方案,指针?一个Netbeans插件这样做会很棒,但我想这只是一个一厢情愿的想法......

java database dbunit netbeans jpa

8
推荐指数
1
解决办法
3133
查看次数

如何使用dbUnit将数据库恢复到初始状态?

我是自动化测试和dbUnit的新手.所以我很感激你的建议.

我将创建一个测试套件,它将以下列方式运行:

  • 创建一个内存H2数据库
  • 运行DDL脚本来创建表
  • 运行dbUnit以插入将由所有测试使用的初始数据(让我们称之为STATE0).
  • 运行测试

直到那里它看起来不错,但我不明白的是,如何在测试运行后将数据库恢复到STATE0并更改数据?

我可以用dbUnit做到吗?
还是别的什么?
我应该在每次测试之前重新创建数据库吗?

简单的不在测试中提交事务对我来说是不合适的,因为测试最终会运行多个事务,可能不止一个数据库连接.

java testing dbunit unit-testing

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

org.dbunit.dataset.NoSuchTableException:未在架构'null'中找到表'xxx'

我知道dbunit已经在这里进行了讨论.我已经阅读了大部分内容,但我似乎无法找到解决问题的方法.

我已经设置了hibernate和spring.我正在做TDD所以我必须在编写代码之前连接一个正确的DAO测试框架.Dbunit浮现在脑海中,我必须设置它.这是ma testdataset.xml

    <?xml version='1.0' encoding='UTF-8'?>
    <dataset>
        <table name="status">
            <column>statusId</column>
            <column>status</column>
            <row>
                <value>0</value>
                <value>Available</value>
            </row>
        </table>
        <table name="user">
            <column>userId</column>
            <column>firstName</column>
            <column>lastName</column>
            <column>username</column>
            <column>password</column>
            <column>email</column>
            <row>
                <value>0</value>
                <value>system</value>
                <value>admin</value>
                <value>admin</value>
                <value>admin</value>
                <value>admin@ccbs.com</value>
            </row>
        </table>
        <table name="reservation">
            <column>reservationId</column>
            <column>userId</column>
            <column>reservationDate</column>
            <column>startDate</column>
            <column>endDate</column>
            <column>statusId</column>
            <row>
                <value>0</value>
                <value>0</value>
                <value>2011-02-20 12:46:00.0</value>
                <value>2011-03-01 12:00:00.0</value>
                <value>2011-04-01 12:00:00.0</value>
                <value>0</value>
            </row>
        </table>
    </dataset>
Run Code Online (Sandbox Code Playgroud)

一切似乎都很好,直到我尝试使用加载数据集的基类连接一些代码.这是我的代码:

@Transactional
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:test-applicationContext.xml" })
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
public class BaseContextSensitiveTest {

    @BeforeClass
public static void setUpDatabase() throws Exception { …
Run Code Online (Sandbox Code Playgroud)

java spring dbunit hibernate

8
推荐指数
3
解决办法
3万
查看次数

xUnit IClassFixture 构造函数被多次调用

我正在使用 xUnit 进行集成测试。为此,我使用 localdb 实例。话虽这么说,我想使用一些预定义的数据启动一次数据库实例,当然我希望所有测试用例都保持这一点。我可以单独编写每个测试用例,这样它们就不会相互冲突,但我只想创建一次数据库实例。

我在每次测试之前都遵循 xunit 构造函数的运行,代码如下所示

//similar to base class
public class DatabaseFixture : IDisposable
{
    public SqlConnection Db { get; private set; }
    public DatabaseFixture()
    {
        InitialDB();
    }
    public InitialDB()
    {
        CreateDBInstance();
        CreateDBSchemas();
        InitDBMetaData();
    }

    public void Dispose()
    {
        // clean up test data from the database
        CleanUpDB();
    }
}

//Class where you want to use shared class instance
public class MyDatabaseTests : IClassFixture<DatabaseFixture>
{
    DatabaseFixture dbFixture;
    public MyDatabaseTests(DatabaseFixture fixture)
    {
        this.dbFixture = fixture;
    } …
Run Code Online (Sandbox Code Playgroud)

dbunit integration-testing xunit

8
推荐指数
1
解决办法
2326
查看次数

DBUnit不会在每个方法之后清理并插入数据库,因此测试不是独立的

我有一个DAO类的测试,我使用DBUnit来创建和填充数据库(使用内存中的德比).我在测试dao update方法时遇到问题,因为它修改数据然后另一个测试失败.因为我们所有人都知道测试应该独立于任何其他测试,并且我知道DBUnit在每次测试后都有一些清理和重新生成数据库的工具.但它不起作用!

代码就是这个(TestNG):

@BeforeMethod
public void prepareData() throws Exception {
  cleanAndPopulate("users");
}

public void cleanAndPopulate (String nameXML) throws Exception {
  IDatabaseConnection conn; 
  conn = new DatabaseConnection (sessionForTesting.connection());        
  InputStream is = DBconnection.class.getClassLoader()
    .getResourceAsStream(nameXML + ".xml");      
  dataset = new FlatXmlDataSet(is);
  System.out.println("*** Preparando base de datos de test"); 
  DatabaseOperation.CLEAN_INSERT.execute(conn, dataset); 
}
Run Code Online (Sandbox Code Playgroud)

这是测试(禁用以避免附带影响):

@Test(enabled=false) // Deja la BBDD en estado erroneo!!!
public void busco_y_actualizo() throws Exception { 
    PacoUser resultado = userdao.getById(1L);
    resultado.setName("OTRO");
    userdao.update(resultado);
    PacoUser resultado2 = userdao.getById(1L);
    AssertJUnit.assertNotNull(resultado2); 
    AssertJUnit.assertEquals("OTRO", resultado2.getName());    
}
Run Code Online (Sandbox Code Playgroud)

java tdd testng dbunit

7
推荐指数
2
解决办法
6519
查看次数

Hibernate Search不会索引/重新索引实体

我正在尝试在我的项目中使用Hibernate Search(现在使用junit + dbunit编写测试),但搜索查询不会返回任何结果.我昨天研究了这个问题并得出结论,问题是Hibernate Search与dbunit @DatabaseSetup不兼容(类似于这个未回答的问题中的类似问题:链接).我将提供更多细节,但首先是冷杉,有我的实体类:

@Entity
@Indexed
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "userId")
    private Long id;
    (...)
    @Column(nullable = false, unique = true)
    @Field(index = Index.YES, analyze=Analyze.YES, store=Store.NO)
    private String email;
    (...)
    @Column(nullable = false, unique = true)
    @Field(index = Index.YES, analyze=Analyze.YES, store=Store.NO)
    private String username;
    (...)
}
Run Code Online (Sandbox Code Playgroud)

我通过我的DAO将它保存到db:

@Repository
public class UserDAOImpl implements UserDAO {

    @Autowired
    private SessionFactory sessionFactory;

    @Override
    public long save(User toSave) {

        return (Long) this.sessionFactory.getCurrentSession().save(toSave);
    }
(...)
} …
Run Code Online (Sandbox Code Playgroud)

java spring dbunit hibernate hibernate-search

7
推荐指数
1
解决办法
2668
查看次数

DBUnit PostgresqlDataTypeFactory无法识别枚举列表

我正在使用DBUnit进行集成测试,在执行测试代码之前,我遇到了这个错误:

badges.track_types data type (2003, '_text') not recognized and will be ignored. See FAQ for more information.

org.dbunit.dataset.NoSuchColumnException: badges.TRACK_TYPES -  (Non-uppercase input column: track_types) in ColumnNameToIndexes cache map. Note that the map's column names are NOT case sensitive.
Run Code Online (Sandbox Code Playgroud)

被忽略的列是枚举列表.在数据集中,它是这样编写的:

<?xml version='1.0' encoding='UTF-8'?>
<dataset>
  // More info ...
  <badges name="30&apos;000" description="30k a day" image_name="30000.png" threshold_val="30000.00000000" has_many="true" id="45" track_types="{TRACK_GENERIC}" "/> 
</dataset> 
Run Code Online (Sandbox Code Playgroud)

我查看了DBUnit FAQ并看到了这个问题,说我必须覆盖isEnumType()方法来支持我的枚举是Postgresql,所以我这样做了:

/**
 * Override method to set custom properties/features
 */
protected void setUpDatabaseConfig(DatabaseConfig config) {

    config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new PostgresqlDataTypeFactory(){ …
Run Code Online (Sandbox Code Playgroud)

java postgresql enums dbunit integration-testing

7
推荐指数
1
解决办法
819
查看次数