游戏中的单元测试!不需要测试Play服务器的Framework应用程序

时间:2011-06-16 05:55:41

标签: java testing playframework-1.x

在我的Play中运行测试的一个选项!应用程序是通过执行命令play auto-test

Play似乎确定要运行的测试的方法之一是使用超类play.test.UnitTest(或其他Play等效项)查找所有测试类。有一个测试类扩展UnitTest似乎带来了一些开销,如控制台中吐出的这些东西所示:

INFO   info, Starting C:\projects\testapp\.
WARN   warn, Declaring modules in application.conf is deprecated. Use dependencies.yml instead (module.secure)
INFO   info, Module secure is available (C:\play-1.2.1\modules\secure)
INFO   info, Module spring is available (C:\projects\testapp\.\modules\spring-1.0.1)
WARN   warn, Actually play.tmp is set to null. Set it to play.tmp=none
WARN   warn, You're running Play! in DEV mode
INFO   info, Connected to jdbc:h2:mem:play;MODE=MYSQL;LOCK_MODE=0
INFO   info, Application 'Test App' is now started !

显然,为需要这样设置的测试设置Play环境很有用,但是,如果我有一个测试类来测试生产代码,该代码执行不需要Play环境的逻辑,我不想扩展{ {1}}这样我就可以避免启动Play环境的开销。

如果我有一个不扩展UnitTest的测试类,则它不会被命令UnitTest执行。有没有办法让play auto-test命令执行所有测试,无论我是否延长Play的play auto-test

编辑:有人为这个问题提出了ticket

3 个答案:

答案 0 :(得分:2)

答案简短:不。一个更长的答案:除非你在框架中更改代码。自动测试是一个Ant任务,它设置服务器并触发测试,但它不使用ant任务,因此它不会检测(默认情况下)你的'正常'单元测试。

您有两个选择:要么通过任务向Play的Ant文件添加额外的任务以运行单元测试(您还需要包含相关的jar),或者编辑用于启动Play测试环境的代码。

两者都意味着将框架更改为某个级别。虽然假设您正在使用Play,但我想知道为什么您不应该按照Play模式进行所有测试......

答案 1 :(得分:0)

如果这些测试不需要任何播放!功能,你为什么不把它们放在图书馆?使用您的示例(math add):创建一个calculator.jar包,并在运行测试后使用Ant或Maven构建它。 像这样,你可以在几个Play中使用你的库!项目(或Spring,Struts,......如果你愿意的话。

答案 2 :(得分:0)

我真的不明白为什么问题本身甚至是值得商榷的。进行简单和小型的单元测试(即使在项目的Web部分中)也是最常见的事情。 如果您有许多测试,框架初始化的额外开销会显着减慢您的往返次数。正如在故障单中可以看到的,当前的解决方法是使您的单元测试扩展org.junit.Assert而不是play.test.UnitTest