所以我现在正在使用Java和Junit测试。我还使用DbUnit进行方便的数据库设置和拆卸。我拥有超过40个桌子的海量数据库。
为了简化我尝试使用
拆除我的数据库[...]
@DatabaseTeardown("classpath:/emptyDb.xml")
public MyClassTest
我的emptyDb.xml
包含数据库中每个表的空行,如:
<dataset>
<database.table1 />
<database.table2 />
...
<database.tableN />
</dataset>
我还为数据init创建了类似的文件,只是行不空。我们称之为initDb.xml
并且我遇到了非常奇怪的行为,我的测试方法甚至失败了,通过它不应该。我的测试用例如下:
@Test
@DatabaseSetup("classpath:/initDb.xml")
@ExpectedDatabase("classpath/initDb.xml") // yes I'm using the same file on purpose
public void myTest()
{} // empty method body is part of a test here
根据我的理解,这个简单的测试应该总是成功,但情况是,它失败了,错误跟踪看起来像这样:
junit.framework.ComparisonFailure: table count expected:<4[1]> but was:<4[8]>
at org.dbunit.assertion.JUnitFailureFactory.createFailure(JUnitFailureFactory.java:39)
at org.dbunit.assertion.DefaultFailureHandler.createFailure(DefaultFailureHandler.java:105)
at org.dbunit.assertion.DbUnitAssert.assertEquals(DbUnitAssert.java:237)
at org.dbunit.assertion.DbUnitAssert.assertEquals(DbUnitAssert.java:205)
at org.dbunit.Assertion.assertEquals(Assertion.java:104)
at com.github.springtestdbunit.assertion.DefaultDatabaseAssertion.assertEquals(DefaultDatabaseAssertion.java:33)
at com.github.springtestdbunit.DbUnitRunner.verifyExpected(DbUnitRunner.java:115)
at com.github.springtestdbunit.DbUnitRunner.afterTestMethod(DbUnitRunner.java:67)
at com.github.springtestdbunit.DbUnitTestExecutionListener.afterTestMethod(DbUnitTestExecutionListener.java:158)
at org.springframework.test.context.TestContextManager.afterTestMethod(TestContextManager.java:406)
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:90)
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
任何可能导致此类行为的建议?我正在寻找解决方案,似乎数据库表肯定有问题,但我无法找到解决方案。
<小时/> 更新