Tag: dbunit

将数据集加载到数据库时,DBUnit的NoPrimaryKeyException

当我尝试运行一个使用DBUnit的unit testing时,我得到NoPrimaryKeyException。 数据表是使用Hibernate创建的,是两个映射多对多关系的类之间的连接表。 定义关系的注释如下: @Override @ManyToMany @JoinTable(name=”offset_file_offset_entries”, joinColumns={@JoinColumn(name=”offset_entry_id”)},inverseJoinColumns={@JoinColumn(name=”file_description_id”)}) public List getOffsets() { 我用来定义数据集的XML文件中的其他条目似乎工作正常但不是连接表。 我得到以下exception: org.dbunit.dataset.NoPrimaryKeyException: offset_file_offset_entries at org.dbunit.operation.UpdateOperation.getOperationData(UpdateOperation.java:72) at org.dbunit.operation.RefreshOperation$UpdateRowOperation.(RefreshOperation.java:266) at org.dbunit.operation.RefreshOperation.createUpdateOperation(RefreshOperation.java:142) at org.dbunit.operation.RefreshOperation.execute(RefreshOperation.java:100) at org.dbunit.ext.mssql.InsertIdentityOperation.execute(InsertIdentityOperation.java:217) at uk.co.sabio.obscheduler.application.dao.AbstractBaseDatabaseTest.setUp(AbstractBaseDatabaseTest.java:57) at org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests.runManaged(AbstractJUnit38SpringContextTests.java:332) at org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests.access$0(AbstractJUnit38SpringContextTests.java:326) at org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests$1.run(AbstractJUnit38SpringContextTests.java:216) at org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests.runTest(AbstractJUnit38SpringContextTests.java:296) at org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests.runTestTimed(AbstractJUnit38SpringContextTests.java:253) at org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests.runBare(AbstractJUnit38SpringContextTests.java:213) at junit.framework.TestResult$1.protect(TestResult.java:110) at junit.framework.TestResult.runProtected(TestResult.java:128) at junit.framework.TestResult.run(TestResult.java:113) at junit.framework.TestCase.run(TestCase.java:124) at junit.framework.TestSuite.runTest(TestSuite.java:232) at junit.framework.TestSuite.run(TestSuite.java:227) at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83) at […]

让DbUnit使用Hibernate事务

我在尝试将Hibernate事务中的更改推送到数据库以使DbUnit在我的测试用例中正常工作时遇到问题。 似乎DbUnit没有看到Hibernate所做的更改,因为它们还没有在事务结束时提交……而且我不确定如何重构我的测试用例以使其工作。 这是我过度简化的测试用例来certificate我的问题: – @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { “classpath:applicationContext-test.xml” }) @TransactionConfiguration(transactionManager = “transactionManager”) @Transactional public class SomeTest { @Autowired protected DataSource dataSource; @Autowired private SessionFactory sessionFactory; @Test public void testThis() throws Exception { Session session = sessionFactory.getCurrentSession(); assertEquals(“initial overlayType count”, 4, session.createQuery(“from OverlayType”).list().size()); //———– // Imagine this block is an API call, ex: someService.save(“AAA”); // […]

Spring Test DBunit警告

我正在使用spring-test-dbunit,我在unit testing中收到一条警告: 码: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { “/context.xml”}) @TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class, TransactionalTestExecutionListener.class, DbUnitTestExecutionListener.class }) public class TestDB { @Autowired private ICourseService courseService; @Test @DatabaseSetup(“sampleData.xml”) public void testFind() throws Exception { List courseList = this.courseService.getAllCourses(); assertEquals(1, courseList.size()); assertEquals(“A001”, courseList.get(0).getCourseNumber()); } } 警告: 1093 [main] WARN org.dbunit.dataset.AbstractTableMetaData – 发现潜在问题:配置的数据类型factory’class org.dbunit.dataset.datatype.DefaultDataTypeFactory’可能导致当前数据库’MySQL’出现问题(例如某些数据类型可能不会得到适当支持)。 在极少数情况下,您可能会看到此消息,因为支持的数据库产品列表不完整(list = [derby])。 如果是这样,请通过论坛请求java级更新。如果您使用自己的IDataTypeFactory扩展DefaultDataTypeFactory,请确保覆盖getValidDbProducts()以指定支持的数据库产品。 当我使用没有spring-test-dbunit的DBunit时,问题可以解决如下: Connection jdbcConnection […]

在DBUnit中重置序列?

我希望在Java + DBUnit /中的每次测试后重置数据库AND序列。 我已经看到了这个问题,但没有我正在努力获得的代码解决方案。 如何在DBUnit中使用Oracle序列号?

DBUnit数据集中与当前相关的日期

我想知道是否有任何方法可以在DBUnit XML数据集中明确指定日期作为日期。 有时代码逻辑在将来的日期和过去的日期是不同的,我想测试这两种情况。 当然,我可以指定类似于2239年11月5日的东西,并确保测试在这个日期之前有效但是有更优雅的方式。 我在Java开发期间还没有遇到过这样的情况,但是一旦我遇到日期前一天,日期前两天和日期前两天以上的代码逻辑不同的经历。 在这种情况下,编写数据库驱动测试的唯一可能解决方案是在数据导入期间插入相对日期。 DBUnit是否为此提供了任何设施?

将数据集表示为xml文件,在DBunit中给出错误

大家好我正在使用dbunit。 我正在尝试将db的datset导出到xml文件中。 import java.sql.Connection; import java.sql.DriverManager; import org.dbunit.database.DatabaseConnection; import org.dbunit.database.IDatabaseConnection; import org.dbunit.dataset.IDataSet; import org.dbunit.dataset.xml.FlatXmlDataSet; import java.io.FileOutputStream; public class DatabaseExport { public static void main(String[] args) throws Exception { Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”); DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver()); Connection jdbcConnection = DriverManager.getConnection(“jdbc:sqlserver://172.26.37.113:1433;DatabaseName=def_config”,”sqladmin_”,”halloween$2004″); IDatabaseConnection connection = new DatabaseConnection( jdbcConnection ); // full database export IDataSet fullDataSet = connection.createDataSet(); FlatXmlDataSet.write(fullDataSet, new FileOutputStream(“full.xml”)); } } […]

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

有没有办法让DB-Unit忽略比较行的顺序? 我的问题是,我不知道行将以何种顺序写入数据库,但DB-Unit强制我给出一个有序列表。 我想要dbunit做的是: 检查数据库和预期数据集中的行数是否匹配(已解决:开箱即用 检查每个行是否只在结果集中找到一次。 (未解决) 有任何想法吗?

使用Arquillian时,如何引用放在WEB-INF文件夹中的文件?

我正在使用maven和标准目录布局。 所以我在src / test / resources文件夹中添加了一个testdata.xml文件,我还将其添加为: .addAsWebInfResource(“testdata.xml”, “testdata.xml”) 在部署方法中,我已经确认它在那里。 这将使文件出现在/WEB-INF/testdata.xml 。 现在我需要在我的代码中引用这个文件,我尝试了几个不同的getClass().getResourceAsStream(…)并一次又一次失败,所以我现在需要一些建议。 我需要它用于我的DBUnit集成测试。 这不可能吗?

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

我是自动化测试和dbUnit的新手。 所以我很感激你的建议。 我将创建一个测试套件,它将按以下方式运行: 创建一个内存H2数据库 运行DDL脚本来创建表 运行dbUnit以插入将由所有测试使用的初始数据(让我们称之为STATE0 )。 运行测试 到那里它对我来说很好看,但我不明白的是,如何在测试运行后将数据库恢复到STATE0并更改数据? 我可以用dbUnit做到吗? 还是别的什么? 我应该在每次测试之前重新创建数据库吗? 简单的不在测试中提交事务不适合我,因为测试最终会运行多个事务,可能不止一个数据库连接。

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

我知道dbunit已经在这里进行了讨论。 我已经阅读了大部分内容,但我似乎无法找到解决问题的方法。 我已经设置了hibernate和弹簧。 我正在做TDD所以我必须在编写代码之前连接一个正确的DAO测试框架。 Dbunit浮现在脑海中,我必须设置它。 这是ma testdataset.xml statusId status 0 Available userId firstName lastName username password email 0 system admin admin admin admin@ccbs.com reservationId userId reservationDate startDate endDate statusId 0 0 2011-02-20 12:46:00.0 2011-03-01 12:00:00.0 2011-04-01 12:00:00.0 0 一切似乎都很好,直到我尝试使用加载数据集的基类连接一些代码。 这是我的代码: @Transactional @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { “classpath:test-applicationContext.xml” }) @TransactionConfiguration(transactionManager = “transactionManager”, defaultRollback = true) public class […]