关于sbt:为什么使用激活器测试从Play 2.2.2迁移到2.3后为何不执行测试?

Why are no tests executed after migration from Play 2.2.2 to 2.3 with activator test?

我将我的应用程序从Play 2.2.2升级到了2.3。我的应用程序运行良好。

有时activator test给出以下输出:

1
2
3
4
5
[info] Loading project definition from /Users/myapp/project
[info] Set current project to myapp (in build file:/Users/myapp/)
[info] Compiling 23 Scala sources and 180 Java sources to /Users/myapp/target/scala-2.10/classes...
[info] Compiling 55 Java sources to /Users/myapp/target/scala-2.10/test-classes...
[success] Total time: 112 s, completed 24 juin 2014 17:53:06

就是这样...没有运行测试。如果我尝试运行testOnly,则找不到它。

此外,即使我不更改任何文件,每次尝试测试应用程序时,都会重新编译源代码。 Play 2.2并非如此。

我什至没有更多要显示的日志。当我尝试使用activator ui进行测试时,我有更多的日志,但也没有运行任何测试。

如果我手动删除文件夹project/projectproject/targettarget,并运行命令activator test,则对于每个测试类,都会收到以下错误:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[error] Execution of test functional.actor.UserEditInformationTest failed: java.lang.ClassNotFoundException: functional.actor.UserEditInformationTest
[error]     at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
[error]     at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
[error]     at java.security.AccessController.doPrivileged(Native Method)
[error]     at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
[error]     at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
[error]     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
[error]     at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
[error]     at com.novocode.junit.JUnitRunner$1.execute(JUnitRunner.java:120)
[error]     at sbt.ForkMain$Run$2.call(ForkMain.java:294)
[error]     at sbt.ForkMain$Run$2.call(ForkMain.java:284)
[error]     at java.util.concurrent.FutureTask.run(FutureTask.java:262)
[error]     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
[error]     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
[error]     at java.lang.Thread.run(Thread.java:744)
[info] functional.actor.UserEditInformationTest
[info] ! functional.actor.UserEditInformationTest
[error] sbt.ForkMain$ForkError: functional.actor.UserEditInformationTest
[error]     at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
[error]     at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
[error]     at java.security.AccessController.doPrivileged(Native Method)
[error]     at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
[error]     at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
[error]     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)

如何解决此问题?

编辑
我的build.sbt文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
name :="myapp"

version :="1.0.0"

scalaVersion :="2.10.4"

offline := true

// Play Core dependencies
libraryDependencies ++= Seq(
    javaJdbc,
    javaEbean,
    cache
)

// Specific dependencies
libraryDependencies ++= Seq(
    ...
)

lazy val root = (project in file(".")).enablePlugins(PlayJava)

jacoco.settings

parallelExecution in jacoco.Config := false

fork in Test := true

javaOptions in Test +="-Dconfig.file=conf/application.test.conf"

testOptions in jacoco.Config += Tests.Setup( () => System.setProperty("config.file","conf/application.test.conf") )


我在将应用程序从Play 2.2.1升级到2.3.7时遇到了同样的问题。 Eclipse似乎以某种方式在干扰。我个人的解决方案是退出Eclipse,最后也退出激活器控制台。然后我运行

1
2
 activator clean
 activator cleanFiles

然后

1
 activator test

1
 activator testOnly <package>.<testClass>

有时它不起作用。最终,激活器找到(并运行)了测试,然后一切顺利进行,我可以再次打开激活器控制台和Eclipse。

我希望这会有所帮助...

更新

每次我编写一个新的测试类时,testOnly都找不到它。我需要先运行组合clean-cleanFiles以使testOnly找到它(在这种情况下,不必关闭Eclipse)。


Play 2.3.1已发布:https://groups.google.com/forum/#!topic/play-framework/kz3iaBbPIwA

我升级了我的应用,现在一切似乎都可以正常工作了。我可以根据需要多次执行测试,它们可以正常工作。