Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
集成测试DBUnit NoSuchTableException Java_Java_Xml - Fatal编程技术网

集成测试DBUnit NoSuchTableException Java

集成测试DBUnit NoSuchTableException Java,java,xml,Java,Xml,当我开始测试时,我有一个NoSuchTableException。是否需要将内存数据库的名称设置为与生产中相同的名称 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration @TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class,

当我开始测试时,我有一个NoSuchTableException。是否需要将内存数据库的名称设置为与生产中相同的名称

@RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration
    @TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class,
            TransactionalTestExecutionListener.class, DbUnitTestExecutionListener.class })
    @DatabaseSetup(type = DatabaseOperation.CLEAN_INSERT, value = "login.xml")
    public class LoginControllerTest {

        private MockMvc mockMvc;

        @Before
        public void setUp() {
            mockMvc = MockMvcBuilders.xmlConfigSetup("loginControllerTest-context.xml").build();
        }

        @Test
        @ExpectedDatabase("login.xml")
        public void testShowForm() throws Exception {
            mockMvc.perform(get("/login")).andExpect(status().isOk()).andExpect(view().name("/login"))
                    .andExpect(forwardedUrl("/WebContent/j/login.jsp"))
                    .andExpect(model().attribute("form", hasProperty("id", nullValue())))
                    .andExpect(model().attribute("form", hasProperty("email", isEmptyOrNullString())))
                    .andExpect(model().attribute("form", hasProperty("username", isEmptyOrNullString())))
                    .andExpect(model().attribute("form", hasProperty("hostname", isEmptyOrNullString())))
                    .andExpect(model().attribute("form", hasProperty("pass", isEmptyOrNullString())));
        }
    }
这里是loginControllerTest context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/task
    http://www.springframework.org/schema/task/spring-task-3.2.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.2.xsd
    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">

    <tx:annotation-driven transaction-manager="transactionManager" />
    <context:component-scan base-package="com.profiles.controller.test" />

    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="org.hsqldb.jdbcDriver" />
        <property name="url" value="jdbc:hsqldb:mem:login" />
        <property name="username" value="sa" />
        <property name="password" value="" />
    </bean>

</beans>
<?xml version="1.0" encoding="UTF-8"?>
<dataset>
    <person id="1" email="qwerty@asdf.com" username="qwerty"
        hostname="asdf.com" pass="password1234" />

    <person id="2" email="zxcvb@asdf.com" username="zxcvb"
        hostname="asdf.com" pass="password1234" />
</dataset>

这里是login.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/task
    http://www.springframework.org/schema/task/spring-task-3.2.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.2.xsd
    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">

    <tx:annotation-driven transaction-manager="transactionManager" />
    <context:component-scan base-package="com.profiles.controller.test" />

    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="org.hsqldb.jdbcDriver" />
        <property name="url" value="jdbc:hsqldb:mem:login" />
        <property name="username" value="sa" />
        <property name="password" value="" />
    </bean>

</beans>
<?xml version="1.0" encoding="UTF-8"?>
<dataset>
    <person id="1" email="qwerty@asdf.com" username="qwerty"
        hostname="asdf.com" pass="password1234" />

    <person id="2" email="zxcvb@asdf.com" username="zxcvb"
        hostname="asdf.com" pass="password1234" />
</dataset>

最后但并非最不重要的堆栈跟踪

org.dbunit.dataset.NoSuchTableException: person
    at org.dbunit.database.DatabaseDataSet.getTableMetaData(DatabaseDataSet.java:288)
    at org.dbunit.operation.DeleteAllOperation.execute(DeleteAllOperation.java:109)
    at org.dbunit.operation.CompositeOperation.execute(CompositeOperation.java:79)
    at com.github.springtestdbunit.DbUnitRunner.setupOrTeardown(DbUnitRunner.java:159)
    at com.github.springtestdbunit.DbUnitRunner.beforeTestMethod(DbUnitRunner.java:70)
    at com.github.springtestdbunit.DbUnitTestExecutionListener.beforeTestMethod(DbUnitTestExecutionListener.java:136)
    at org.springframework.test.context.TestContextManager.beforeTestMethod(TestContextManager.java:277)
    at org.springframework.test.context.junit4.SpringMethodRoadie.runBefores(SpringMethodRoadie.java:315)
    at org.springframework.test.context.junit4.SpringMethodRoadie.runBeforesThenTestThenAfters(SpringMethodRoadie.java:253)
    at org.springframework.test.context.junit4.SpringMethodRoadie.runWithRepetitions(SpringMethodRoadie.java:234)
    at org.springframework.test.context.junit4.SpringMethodRoadie.runTest(SpringMethodRoadie.java:204)
    at org.springframework.test.context.junit4.SpringMethodRoadie.run(SpringMethodRoadie.java:146)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.invokeTestMethod(SpringJUnit4ClassRunner.java:151)
    at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
    at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
    at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
    at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
    at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
    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:675)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

junit.framework.ComparisonFailure: table count expected:<[1]> but was:<[0]>
    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:128)
    at com.github.springtestdbunit.DbUnitRunner.afterTestMethod(DbUnitRunner.java:80)
    at com.github.springtestdbunit.DbUnitTestExecutionListener.afterTestMethod(DbUnitTestExecutionListener.java:141)
    at org.springframework.test.context.TestContextManager.afterTestMethod(TestContextManager.java:340)
    at org.springframework.test.context.junit4.SpringMethodRoadie.runAfters(SpringMethodRoadie.java:351)
    at org.springframework.test.context.junit4.SpringMethodRoadie.runBeforesThenTestThenAfters(SpringMethodRoadie.java:262)
    at org.springframework.test.context.junit4.SpringMethodRoadie.runWithRepetitions(SpringMethodRoadie.java:234)
    at org.springframework.test.context.junit4.SpringMethodRoadie.runTest(SpringMethodRoadie.java:204)
    at org.springframework.test.context.junit4.SpringMethodRoadie.run(SpringMethodRoadie.java:146)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.invokeTestMethod(SpringJUnit4ClassRunner.java:151)
    at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
    at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
    at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
    at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
    at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
    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:675)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
org.dbunit.dataset.NoSuchTableException:个人
位于org.dbunit.database.DatabaseDataSet.getTableMetaData(DatabaseDataSet.java:288)
位于org.dbunit.operation.deleteAllooperation.execute(deleteAllooperation.java:109)
在org.dbunit.operation.CompositeOperation.execute(CompositeOperation.java:79)
位于com.github.springtestdbunit.DbUnitRunner.setuportardown(DbUnitRunner.java:159)
位于com.github.springtestdbunit.DbUnitRunner.beforeTestMethod(DbUnitRunner.java:70)
在com.github.springtestdbunit.DbUnitTestExecutionListener.beforeTestMethod(DbUnitTestExecutionListener.java:136)上
位于org.springframework.test.context.TestContextManager.beforeTestMethod(TestContextManager.java:277)
位于org.springframework.test.context.junit4.SpringMethodRoadie.runBefores(SpringMethodRoadie.java:315)
位于org.springframework.test.context.junit4.SpringMethodRoadie.runbeforesthentestthenature(SpringMethodRoadie.java:253)
位于org.springframework.test.context.junit4.SpringMethodRoadie.runWithRepetitions(SpringMethodRoadie.java:234)
位于org.springframework.test.context.junit4.SpringMethodRoadie.runTest(SpringMethodRoadie.java:204)
位于org.springframework.test.context.junit4.SpringMethodRoadie.run(SpringMethodRoadie.java:146)
位于org.springframework.test.context.junit4.SpringJUnit4ClassRunner.invokeTestMethod(SpringJUnit4ClassRunner.java:151)
位于org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
位于org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
位于org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
位于org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
位于org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
位于org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
位于org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
junit.framework.ComparisonFailure:应为表计数,但为:
位于org.dbunit.assertion.JUnitFailureFactory.createFailure(JUnitFailureFactory.java:39)
位于org.dbunit.assertion.DefaultFailureHandler.createFailure(DefaultFailureHandler.java:105)
位于org.dbunit.assertion.DbUnitAssert.assertEquals(DbUnitAssert.java:237)
位于org.dbunit.assertion.DbUnitAssert.assertEquals(DbUnitAssert.java:205)
位于org.dbunit.Assertion.assertEquals(Assertion.java:104)
位于com.github.springtestdbunit.assertion.DefaultDatabaseAssertion.assertEquals(DefaultDatabaseAssertion.java:33)
位于com.github.springtestdbunit.DbUnitRunner.verifyExpected(DbUnitRunner.java:128)
位于com.github.springtestdbunit.DbUnitRunner.afterTestMethod(DbUnitRunner.java:80)
在com.github.springtestdbunit.DbUnitTestExecutionListener.afterTestMethod(DbUnitTestExecutionListener.java:141)上
位于org.springframework.test.context.TestContextManager.afterTestMethod(TestContextManager.java:340)
位于org.springframework.test.context.junit4.SpringMethodRoadie.runafter(SpringMethodRoadie.java:351)
位于org.springframework.test.context.junit4.SpringMethodRoadie.runbeforesthentestthenature(SpringMethodRoadie.java:262)
位于org.springframework.test.context.junit4.SpringMethodRoadie.runWithRepetitions(SpringMethodRoadie.java:234)
位于org.springframework.test.context.junit4.SpringMethodRoadie.runTest(SpringMethodRoadie.java:204)
位于org.springframework.test.context.junit4.SpringMethodRoadie.run(SpringMethodRoadie.java:146)
位于org.springframework.test.context.junit4.SpringJUnit4ClassRunner.invokeTestMethod(SpringJUnit4ClassRunner.java:151)
位于org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
位于org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
位于org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
位于org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
位于org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
位于org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
位于org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

集成测试数据集应包含有效的表名,因此是的,您需要具有相同的表名才能成功执行测试。

集成测试数据集应包含有效的表名,因此,是的,您需要有相同的表名才能成功执行测试。

您是如何创建表的?@Thilo我认为login.xml会关心这个问题?您是如何创建表的?@Thilo我认为login.xml会关心这个问题?