当前位置: 首页 > 知识库问答 >
问题:

arquillian在测试前创建数据库模式

柴衡
2023-03-14

您好,我尝试在测试前创建数据库schem,但它失败了:/这是我的脚本:

CREATE TABLE OFCONVERSATION
(
  CONVERSATIONID integer NOT NULL,
  ROOM character varying(1024),
  ISEXTERNAL smallint NOT NULL,
  STARTDATE bigint NOT NULL,
  LASTACTIVITY bigint NOT NULL,
  MESSAGECOUNT integer NOT NULL,
  CONSTRAINT OFCONVERSATION_PK PRIMARY KEY (CONVERSATIONID)
);

并且当我尝试使用squirell和嵌入式Derby运行该脚本时,它起作用了。

  1. 首先,我尝试在类测试之前使用注释@createSchema(“scripts/import.sql”):
  2. 接下来尝试使用@applyscriptbefore
  3. 第二次我尝试使用脚本:

property name=“ScriptStoExecuteBeforetest”脚本/Import.sql属性

但一切都失败了...

Tests run: 2, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 9.816 sec <<< FAILURE!
getPairChat(com.test.ejb.im.service.impl.PairChatTest)  Time elapsed: 0.451 sec  <<< ERROR!
org.jboss.arquillian.persistence.dbunit.exception.DBUnitDataSetHandlingException: Unable to execute statement: CREATE TABLE OFCONVERSATION
(
CONVERSATIONID integer NOT NULL,
ROOM character varying(1024),
ISEXTERNAL smallint NOT NULL,
STARTDATE bigint NOT NULL,
LASTACTIVITY bigint NOT NULL,
MESSAGECOUNT integer NOT NULL,
CONSTRAINT OFCONVERSATION_PK PRIMARY KEY (CONVERSATIONID)
);
    at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
    at org.apache.derby.impl.sql.compile.ParserImpl.parseStatement(Unknown Source)
    at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
    at org.apache.derby.impl.sql.GenericStatement.prepare(Unknown Source)
    at org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(Unknown Source)
    at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source)
    at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source

这是我的arquillian pom导入:

    <dependency>
      <groupId>org.glassfish.main.extras</groupId>
      <artifactId>glassfish-embedded-all</artifactId>
      <version>${glassfish-embedded-all.version}</version>
      <type>jar</type>
      <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.jboss.arquillian.junit</groupId>
        <artifactId>arquillian-junit-container</artifactId>
        <scope>test</scope>
    </dependency>  

    <dependency>
        <groupId>org.jboss.arquillian.container</groupId>
        <artifactId>arquillian-glassfish-embedded-3.1</artifactId>
        <version>1.0.0.CR3</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.jboss.arquillian.extension</groupId>
        <artifactId>arquillian-persistence-impl</artifactId>
        <version>1.0.0.Alpha6</version>
        <scope>test</scope>
    </dependency>

和我的test-persistence.xml:

 <persistence-unit name="test-ejb" transaction-type="JTA">
  <jta-data-source>test-ds</jta-data-source>
  <exclude-unlisted-classes>false</exclude-unlisted-classes>      
  <properties>
      <property name="eclipselink.target-database" value="DERBY"/>
      <property name="eclipselink.platform.class.name" value="org.eclipse.persistence.platform.database.DerbyPlatform"/>
       <!-- <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/> --> 
      <property name="eclipselink.logging.level" value="ALL"/>
      <property name="eclipselink.jpa.uppercase-column-names" value="true" />
  </properties>
  </persistence-unit>

和glassfish-resources.xml:

<resources>
    <jdbc-connection-pool name="test-pool"
        res-type="javax.sql.DataSource" datasource-classname="org.apache.derby.jdbc.EmbeddedDataSource"
        ping="true">
        <property name="ConnectionAttributes" value="create=true" />
        <property name="DatabaseName" value="./target/derbydb" />
        <property name="Password" value="" />
        <property name="User" value="" />
    </jdbc-connection-pool>
    <jdbc-resource jndi-name="test-ds" pool-name="test-pool" />
</resources>

那么sql脚本或我的配置有什么问题呢?

共有1个答案

施自明
2023-03-14

如果您得到(或与使用Derby类似的内容):

Caused by: java.sql.SQLException: ORA-00911: invalid character

在您的堆栈跟踪中,您可能在alpha6中偶然发现了一个损坏的特性。

 类似资料:
  • 我在测试方面有问题。这是我第一次写测试,我遇到了一个问题。 我刚刚在我的应用程序中创建了一个测试文件夹,并且用于测试URL。 当我键入: 它说: 创建别名默认的测试数据库...创建测试数据库时出错:数据库"database_name"已经存在 如果要尝试删除测试数据库“database_name”,请键入“yes”,或键入“no”取消: 这是什么意思?如果我输入yes会发生什么?我是否丢失了数据库

  • 问题内容: 我的Spring-Boot-Mvc-Web应用程序在文件中具有以下数据库配置: 这是我所做的唯一配置。我在任何地方都没有进行任何其他配置。尽管如此,Spring和子系统会在每次Web应用程序运行时自动重新创建数据库。即在系统运行时重新创建数据库,而在应用程序结束后它包含数据。 我不了解此默认值,并期望它适合测试。 但是,当我开始运行测试时,我发现数据库仅重建一次。由于没有按预定义的顺序

  • 问题内容: 我的Spring-Boot-Mvc-Web应用程序在文件中具有以下数据库配置: 这是我所做的唯一配置。我在任何地方都没有进行任何其他配置。尽管如此,Spring和子系统会在每次Web应用程序运行时自动重新创建数据库。即在系统运行时重新创建数据库,而在应用程序结束后它包含数据。 我不了解此默认值,并期望它适合测试。 但是,当我开始运行测试时,我发现数据库仅重建一次。由于没有按预定义的顺序

  • 如何让Spring Boot在测试类之间从头开始重新创建内存中的测试数据库? 我有几个用和注释的本地集成测试,可以改变数据库状态。我已经用标记了每一个。我期望创建内存数据库的代码将是应用上下文生命周期的一部分,因此在任何后续测试中都应该创建一个新的生命周期。 我可以在日志中看到Flyway正在尝试重新应用迁移,并认为它们已经完成,因为数据库尚未清除。 Spring Boot是否在每个应用上下文之外

  • 考虑一个maven实用工具模块(模块1),它定义了一个抽象类:AbstractFoo.java。在测试资源下,编写了所述类的模型:foomockup.java。还编写了一个测试类:AbstractFootest.java。 现在考虑第二个模块(模块2),它包含一个使用AbstractFoo的类,并声明测试用例:bar.java和bartest.java。java在创建Bar实例的同时创建FooMo

  • 我想用Cucumber测试使用PostgreSQL数据库的Ruby-on-Rails网站。 我还安装了FactoryGirl宝石,这样我就可以创建工厂了。 我知道为测试数据库创建数据的典型方法是编写Gherkin表并将它们放在cucumber文件的后台块中。但是我已经有了一个创建适合测试数据库的samle数据的Ruby脚本。 然而,我现在迷失在cucumber的环境中。您能否建议如何让Cucumb