我知道这里有关于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>
在我尝试使用加载数据集的基类连接一些代码之前,一切似乎都很好。这是我的代码:
@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 {
URL file = getInitalDatasetURL();
testDataset = createDataset(file);
}
@Before
public void init() throws Exception {
log.info("Initializing Data Set");
connection = createDBUnitConnection();
DatabaseOperation.CLEAN_INSERT.execute(connection, testDataset);
}
private static URL getInitalDatasetURL() throws FileNotFoundException {
URL file = ClassLoader.getSystemResource(TEST_DATASET_LOCATION);
if (file == null) {
throw new FileNotFoundException("Unable to find '"
+ TEST_DATASET_LOCATION + "' in the classpath");
}
return file;
}
private static IDataSet createDataset(URL file) throws IOException,
DataSetException {
return new XmlDataSet(file.openStream());
}
private IDatabaseConnection createDBUnitConnection()
throws DatabaseUnitException, SQLException {
Connection connection = getConnection();
IDatabaseConnection dbUnitConn = new DatabaseConnection(connection);
// use the hsql datatypefactory so that boolean properties work
// correctly
DatabaseConfig config = dbUnitConn.getConfig();
config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY,
new HsqldbDataTypeFactory());
return dbUnitConn;
}
一旦命中,DatabaseOperation.CLEAN_INSERT.execute(connection, testDataset);
它将引发以下异常:
org.dbunit.dataset.NoSuchTableException: Did not find table 'USER' in schema 'null'
at org.dbunit.database.DatabaseTableMetaData.<init>(DatabaseTableMetaData.java:142)
at org.dbunit.database.DatabaseDataSet.getTableMetaData(DatabaseDataSet.java:290)
at org.dbunit.operation.DeleteAllOperation.execute(DeleteAllOperation.java:109)
at org.dbunit.operation.CompositeOperation.execute(CompositeOperation.java:79)
at com.cottage.test.BaseContextSensitiveTest.init(BaseContextSensitiveTest.java:64)
我已经准备好了所有的hibernate映射文件,并且数据库已经设置为没有数据。有趣的事情(或令人讨厌的事情,取决于您的查看方式)是,如果我更改数据集中表的顺序,则missingtableexception会抱怨另一个表…用户,保留或状态。
关于我可能在做错的任何建议吗?
DBUnit不会为您创建数据库表,因为它从创建数据集xml到创建预期数据库模式的信息有限。
当与hibernate一起使用时,它将为每个pojo(您要映射到内存中的测试数据库表)都需要正确的hbm映射文件,该文件最终将在测试中使用。没有映射文件,您将获得org.dbunit.dataset.NoSuchTableException: Did not find table 'xxx' in schema 'yyy'
。
此外,还需要有效的hibernate.cfg.xml,并使用所有的hibernate映射文件正确配置。
您可以通过hibernate.hbm2ddl.auto=create-drop
在属性文件中设置此属性来委派数据库创建以使其hibernate。
该错误消息有点误导。应该可能包含更多信息,以了解丢失的hibernate映射文件的影响-但这是DBunit Wiki上的讨论。
问题内容: H2 1.4.191。 DbUnit 2.5.1。 如何解决? 3种情况的代码和结果: 问题答案: 有时,当您使用dbunit时,您需要定义尝试使用该表的模式,也许您可以尝试添加 如果不检查您正在使用的数据源,则可能您未指向正确的数据库或架构。 对于dbunit,我们具有一些属性,请考虑按以下方式使用该属性。
问题内容: 我有以下目录结构: 我尝试在从server.js导出的app.js中调用函数,我这样做: 但是得到错误: 我如何正确包含它? 谢谢。 问题答案: 该路径必须相对于您当前所在的文件。 用
错误:光电控制器中存在FatalErrorException。php第17行:找不到类“App\Http\Controllers\photo” 此代码出现异常-
问题内容: 它的程序基本从用户那里输入6个数字,将它们存储在一个数组中,计算它们的均值和众数。还计算多少个数字大于平均值。我程序的代码是我错的地方 我的意思是正确的,但是我在模式上有问题。 包p18; 导入java.util.Arrays; 导入java.util.Scanner; 问题答案: 您根本没有将输入存储到数组中。您需要添加类似以下内容的内容来存储用户输入: 我还将平均值和总数更改为双精
问题内容: 使用JDK / 11 的早期访问版本来编译基于Java-9且使用VM参数的现有代码 解决HTTP / 2客户端孵化器模块的问题 现在以编译错误结束 找不到模块:jdk.incubator.httpclient Java版本详细信息: 问题答案: 通过HTTP客户端API的标准化,现在可以删除已孵化的API。 现在,标准API的模块名称和软件包名称将 用作- 另外,将所有依赖类路径的应用
在单元测试时,我得到了以下错误- 在对Run Configuration进行了一些调查之后,我们发现它在运行这个单元时使用了错误的模块(main.java.com.example.dexter.sunshine.app)。我们如何改变这个模块?