Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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
Java Grails测试应用程序在CI服务器上失败,但在开发人员计算机上失败_Java_Hibernate_Grails_Maven - Fatal编程技术网

Java Grails测试应用程序在CI服务器上失败,但在开发人员计算机上失败

Java Grails测试应用程序在CI服务器上失败,但在开发人员计算机上失败,java,hibernate,grails,maven,Java,Hibernate,Grails,Maven,我有两台机器,一台Continuus集成服务器和一台开发人员机器 这两台机器运行相同版本的java、maven和grails,并且都运行Ubuntu。 我能想到的唯一区别是CI处于虚拟化环境中 一些证据: CI java-版本 java version "1.6.0_24" Java(TM) SE Runtime Environment (build 1.6.0_24-b07) Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mo

我有两台机器,一台Continuus集成服务器和一台开发人员机器

这两台机器运行相同版本的java、maven和grails,并且都运行Ubuntu。 我能想到的唯一区别是CI处于虚拟化环境中

一些证据:

CI java-版本

java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode) 
java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode) 
Apache Maven 2.2.1 (rdebian-1)
Java version: 1.6.0_24
Java home: /usr/lib/jvm/java-6-sun-1.6.0.24/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux" version: "2.6.32-31-server" arch: "amd64" Family: "unix" 
Apache Maven 2.2.1 (rdebian-1)
Java version: 1.6.0_24
Java home: /usr/lib/jvm/java-6-sun-1.6.0.24/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux" version: "2.6.32-31-generic" arch: "amd64" Family: "unix" 
开发java-版本

java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode) 
java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode) 
Apache Maven 2.2.1 (rdebian-1)
Java version: 1.6.0_24
Java home: /usr/lib/jvm/java-6-sun-1.6.0.24/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux" version: "2.6.32-31-server" arch: "amd64" Family: "unix" 
Apache Maven 2.2.1 (rdebian-1)
Java version: 1.6.0_24
Java home: /usr/lib/jvm/java-6-sun-1.6.0.24/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux" version: "2.6.32-31-generic" arch: "amd64" Family: "unix" 
CI mvn-版本

java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode) 
java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode) 
Apache Maven 2.2.1 (rdebian-1)
Java version: 1.6.0_24
Java home: /usr/lib/jvm/java-6-sun-1.6.0.24/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux" version: "2.6.32-31-server" arch: "amd64" Family: "unix" 
Apache Maven 2.2.1 (rdebian-1)
Java version: 1.6.0_24
Java home: /usr/lib/jvm/java-6-sun-1.6.0.24/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux" version: "2.6.32-31-generic" arch: "amd64" Family: "unix" 
开发mvn-版本

java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode) 
java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode) 
Apache Maven 2.2.1 (rdebian-1)
Java version: 1.6.0_24
Java home: /usr/lib/jvm/java-6-sun-1.6.0.24/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux" version: "2.6.32-31-server" arch: "amd64" Family: "unix" 
Apache Maven 2.2.1 (rdebian-1)
Java version: 1.6.0_24
Java home: /usr/lib/jvm/java-6-sun-1.6.0.24/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux" version: "2.6.32-31-generic" arch: "amd64" Family: "unix" 
CI grails

Welcome to Grails 1.3.7 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: /usr/local/lib/grails-1.3.7 
Welcome to Grails 1.3.7 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: /home/netbrain/dev/apps/grails-1.3.7 
开发grails

Welcome to Grails 1.3.7 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: /usr/local/lib/grails-1.3.7 
Welcome to Grails 1.3.7 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: /home/netbrain/dev/apps/grails-1.3.7 
我在这两台机器上的版本控制中进行了彻底的签出,并删除了文件夹
~/.m2
~/.ivy2
,以避免任何索引重复

当我在我的CI server 6上运行
grails测试应用程序时,测试似乎失败了。当它们在我的开发系统上都在相同的情况下通过时

CI grails测试应用程序

Tests Completed in 28213ms ...
-------------------------------------------------------
Tests passed: 14
Tests failed: 6
------------------------------------------------------- 
Tests Completed in 25889ms ...
-------------------------------------------------------
Tests passed: 20
Tests failed: 0
------------------------------------------------------- 
开发grails测试应用程序

Tests Completed in 28213ms ...
-------------------------------------------------------
Tests passed: 14
Tests failed: 6
------------------------------------------------------- 
Tests Completed in 25889ms ...
-------------------------------------------------------
Tests passed: 20
Tests failed: 0
------------------------------------------------------- 
当我查看从测试输出中得到的错误消息时,我可以看到如下情况:

junit.framework.AssertionFailedError: expected:<1> but was:<0>
not-null property references a null or transient value
junit.framework.AssertionFailedError:应为:但为:
not null属性引用null或瞬态值
就我所见,这些测试在逻辑上是正确的,它们应该会得到这些错误,特别是当一些得到“瞬时值”错误的测试没有将任何内容存储到数据库中时

对我来说,问题似乎存在于hibernate/内存数据库/测试阶段的组合中

导致此问题的环境之间必须存在一些差异。有人对我如何继续调试问题有什么建议吗

再次感谢

编辑

好的,下面是我试过的:

  • 删除文件夹
    ~/.m2
    ~/.ivy2
    ~/.grails
  • 把圣杯洗干净
  • 运行grails测试应用程序
  • 但我仍然看到在我的CI环境中测试失败,而不是在开发机器上

    编辑

    一些新的发展

    我尝试只在CI上运行失败的测试,似乎在运行
    grails测试应用程序时:integration path.to.failing.tests
    它们都通过了!运行grails测试应用程序时会导致这些测试失败:(


    我完全搞不懂这里发生了什么…

    我几乎可以保证这是一个测试污染问题,不同的服务器以不同的顺序运行测试

    测试污染的最大线索总是当您可以自己成功运行测试时,但是当您首先运行其他测试时,它失败了

    我已经多次遇到过这种情况,我处理过一个类的元类或注入的spring单例(比如服务bean)在一个测试中,忘记清理,其他测试受到影响。观察正在运行的测试的输出,并比较它们,以确保它们在两个框上以完全相同的顺序运行。如果不是,则是测试顺序问题

    找出哪些测试交互不好的“最简单”方法是运行
    grails test app
    ,并按照失败框中出现的顺序传入每个测试名称(我通常使用文本编辑器从上一次运行中切掉测试名称,并将它们合并在一起,以便我知道它们的顺序相同)


    另一个潜在问题是,如果一台计算机正在使用mysql,而您错误地将“myisam”配置为默认存储引擎,而不是“innodb”(或另一个支持事务的引擎)在mysql实例上查看哪个引擎是默认引擎。听起来您在使用hsqldb或另一个内存中的db进行测试,所以这可能不是您的问题。

    您是否尝试删除本地Maven存储库?另请检查Maven settings.xml,那里可能有不同的配置。将此作为错误报告添加到Grails project:这是一个后续问题,可能是也可能不是我的问题的原因。非常有用的帖子!我会研究它的!是的,我使用内存数据库进行测试。看起来你说得很对。以开发机器的相同顺序进行测试非常有吸引力。现在我只需比较两个运行顺序,并尝试找到罪魁祸首。这总是结束的作为对我的二进制搜索,我在失败测试之前运行前半部分测试,如果没有失败,那么运行后半部分测试。继续将测试切成两半,直到发现与失败测试隔离运行时,是哪个其他测试类导致了问题。然后,当您确定罪魁祸首时,尝试注释h该类中的所有测试,直到您发现错误的测试方法(有时在设置中)。漂洗,重复,直到你确定你留下了什么污染。感谢你引导我测试污染,这反过来帮助我发现我实际上在grails测试框架中看到了一个错误。这个错误导致测试数据泄漏,如果按特定顺序运行,反过来又导致我的测试失败。有关此错误的更多信息: