Java Eclipse-jUnit测试因Ebean而无法运行

Java Eclipse-jUnit测试因Ebean而无法运行,java,eclipse,junit,playframework,playframework-2.0,Java,Eclipse,Junit,Playframework,Playframework 2.0,我正在尝试使用Eclipse为我的Play2.2.1应用程序运行测试。它们目前无法工作,因为在我从eclipse运行测试时发生了一个奇怪的错误 当我使用“play testOnly…”从命令行运行测试时,测试运行得非常好 我已经研究了该问题的另一个解决方案(),并且已经添加了-javaagent:C:\Java\play-2.2.1\repository\local\org.avaje.ebanorm\avaje-ebanorm-agent\3.2.1\jars\avaje-ebanorm-ag

我正在尝试使用Eclipse为我的Play2.2.1应用程序运行测试。它们目前无法工作,因为在我从eclipse运行测试时发生了一个奇怪的错误

当我使用“play testOnly…”从命令行运行测试时,测试运行得非常好

我已经研究了该问题的另一个解决方案(),并且已经添加了
-javaagent:C:\Java\play-2.2.1\repository\local\org.avaje.ebanorm\avaje-ebanorm-agent\3.2.1\jars\avaje-ebanorm-agent.jar
,作为Eclipse中的默认VM参数。我验证了eclipse实际上正在使用这个jar文件,因为当我将它指向一个不存在的jar文件时,它会抱怨

eclipse控制台中的错误消息是:
transform>cls:play/db/ebean/Model msg:。。。忽略字段_ebean_intercept
。完整错误输出为

这是junit显示的错误消息:

Configuration error: Configuration error[Cannot register class [models.Game] in Ebean server]
at play.api.Configuration$.play$api$Configuration$$configError(Configuration.scala:92)
at play.api.Configuration.reportError(Configuration.scala:570)
at play.Configuration.reportError(Configuration.java:298)
at play.db.ebean.EbeanPlugin.onStart(EbeanPlugin.java:71)
at play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:88)
at play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:88)
at scala.collection.immutable.List.foreach(List.scala:318)
at play.api.Play$$anonfun$start$1.apply$mcV$sp(Play.scala:88)
at play.api.Play$$anonfun$start$1.apply(Play.scala:88)
at play.api.Play$$anonfun$start$1.apply(Play.scala:88)
at play.utils.Threads$.withContextClassLoader(Threads.scala:18)
at play.api.Play$.start(Play.scala:87)
at play.api.Play.start(Play.scala)
at play.test.Helpers.start(Helpers.java:359)
at play.test.WithApplication.start(WithApplication.java:18)
at models.GameTest.setUp(GameTest.java:15)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.VerifyError: Bad type on operand stack
Exception Details:
  Location:
    models/Game.validate()Ljava/lang/String; @4: invokevirtual
  Reason:
    Type 'models/Team' (current frame, stack[0]) is not assignable to 'models/Game'
  Current Frame:
    bci: @4
    flags: { }
    locals: { 'models/Game' }
    stack: { 'models/Team' }
  Bytecode:
    0000000: 2ab6 0059 b600 5d2a b600 60b6 005d a600
    0000010: 0612 26b0 01b0                         
  Stackmap Table:
    same_frame(@20)

    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at play.db.ebean.EbeanPlugin.onStart(EbeanPlugin.java:69)
    ... 36 more

几个月前,我与之抗争,最终放弃了。我的大部分代码都在一个单独的服务层中,很容易进行单元测试。我相信即将发布的Play 2.4版将通过添加依赖注入简化单元测试,其中一些问题可能会消失。您的另一个选择是不使用具有字节码增强功能的EBean(这可能与Play的编译策略相冲突)。