3

在我的 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 环境的逻辑的生产代码,我不想扩展UnitTest以便我可以避免启动 Play 环境的开销。

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

编辑:实际上有人为这个问题提出了一张票

4

3 回答 3

2

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

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

两者都意味着将框架更改到某个级别。尽管假设您正在使用 Play,但我想知道为什么您不应该让所有测试都遵循 Play 模式......

于 2011-06-16T08:32:17.553 回答
0

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

于 2011-06-20T22:29:08.840 回答
0

我真的不明白为什么这个问题本身甚至是值得商榷的。进行简单而小型的单元测试(甚至在项目的 Web 部分中)是最正常的做法。如果您有很多测试,框架初始化的额外开销会显着减慢您的往返速度。从票证中可以看出,当前的解决方法是让您的单元测试扩展 org.junit.Assert 而不是 play.test.UnitTest

于 2011-11-17T17:01:46.357 回答