Is there any way for DBUnit to automatically create tables?

删除回忆录丶 提交于 2019-11-27 14:36:50

Not really. As the answer you linked points out, the dbunit xml files contain data, but not column types.

And you really don't want to do this; you risk polluting your database with test artifacts, opening up the possibility that production code will accidentally rely on tables created by the test process.

Needing to do this strongly suggests you don't have your db creation and maintenance process adequately defined and scripted.

No. You will have to execute an SQL script with the table definitions in.

As I posted in the other thread, the XML does not contain enough data to create a table. I guess you could do something scary like parse the values to attempt to work out what values it contains but that would be quite brittle. This differs from Hibernate in that annotated classes do contain a lot of information on how the database looks. Part in annotations and part in the Java types fields have.

http://www.dbunit.org/faq.html#ddl

Spring Boot/ Spring JDBC can initialize a database with plain JDBC.

Spring JDBC has a DataSource initializer feature. Spring Boot enables it by default and loads SQL from the standard locations schema.sql and data.sql (in the root of the classpath). In addition Spring Boot will load the schema-${platform}.sql and data-${platform}.sql files (if present), where platform is the value of spring.datasource.platform, e.g. you might choose to set it to the vendor name of the database (hsqldb, h2, oracle, mysql, postgresql etc.).

https://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html

If you are using JPA you can usually configure your JPA provider so that it creates/updates the tables on initialization.

E.g. for hibernate, specify the property hibernate.hbm2ddl.auto and set its value to create-drop (should be fine for testing).

See also: Hibernate Documentation, Chapter 3 Configuration

However, make sure that the JPA provider is the first to access the DB ;)

I just wanted to chime in and say that this was very helpful for me. I needed to connect to an Oracle database and export it to an XML file, then import it as a test HSQL database and access it with Hibernate. I used this code to create the tables before doing

DatabaseOperation.CLEAN_INSERT.execute(conn, dataset);. 

A word of caution though, this code sets the first column of each table as the primary key, so be careful if you use relationship tables as you may get a "Primary key constraint violation" on import. Thanks for the code snippet!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!