Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.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 单元测试正在进行!不需要测试播放服务器的框架应用程序_Java_Testing_Playframework 1.x - Fatal编程技术网

Java 单元测试正在进行!不需要测试播放服务器的框架应用程序

Java 单元测试正在进行!不需要测试播放服务器的框架应用程序,java,testing,playframework-1.x,Java,Testing,Playframework 1.x,在我的游戏中运行我的测试的一个选项!应用程序是通过执行命令play auto test Play识别要运行的测试的一种方法是使用super classPlay.test.UnitTest(或其他等效的Play)查找所有测试类。让一个测试类扩展UnitTest似乎会带来一些开销,如控制台中的这一点所示: INFO info, Starting C:\projects\testapp\. WARN warn, Declaring modules in application.conf is

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

Play识别要运行的测试的一种方法是使用super class
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 !
显然,为需要这种设置的测试提供一个播放环境是很有用的,但是,如果我有一个测试类来测试执行不需要播放环境的逻辑的生产代码,我不想扩展
UnitTest
,这样我就可以避免启动播放环境的开销

如果我有一个测试类没有扩展
UnitTest
,那么它就不会被命令
play auto test
执行。有没有办法让
play auto test
命令执行所有测试,而不管我是否扩展play的
UnitTest


编辑:实际上有人就这个问题提出了一个简短的答案:不。再回答一点:不,除非您更改框架中的代码。自动测试是一个设置服务器并触发测试的Ant任务,但它不使用Ant任务,因此它不会检测(默认情况下)您的“正常”单元测试

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


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

!你为什么不把它们放在图书馆里?使用您的示例(math add):创建一个calculator.jar包,并在运行测试后使用Ant或Maven构建它。
这样,您可以在多个游戏中使用您的库!项目(或者Spring、Struts等等,如果你愿意的话)。

我真的不明白为什么这个问题本身是有争议的。进行简单的小型单元测试(即使是在项目的web部分中)是最正常的事情。
如果你有很多测试,那么框架初始化的额外开销会大大降低你的往返速度。正如在罚单中可以看到的,当前的解决方法是让你的单元测试扩展org.junit.Assert而不是play.test.UnitTest

我有一些测试可能测试不需要任何“play”的类功能。假设我有一个数学类,它有一个名为“int add(int left,int right)”的方法。添加两个数字的概念不应该要求我有一个游戏测试环境。@digiarnie我理解,但测试背后的想法是一次运行所有数字,以确保一切正常,因此在这种情况下,它是有意义的:)我不知道你想说什么。我的问题是,除非扩展UnitTest,否则自动测试“不会”运行所有测试。正如您所说,测试背后的想法是一次运行所有测试。“play auto test”忽略不扩展UnitTest(或其他一些play超类)的测试…好的,我的意思是,您在play中使用了一些代码。您希望同时运行该项目的所有测试。播放自动测试仅识别“播放测试”。但是,如果您的代码正在Play项目中使用,那么将您的测试转换为“Play tests”是有意义的,因为您希望在项目的其他测试中运行它们。这比另一种方式更简单(或应该更简单)。通过在Play内部使用的代码中不使用Play测试格式,您正在打破框架的“约定优先于配置”,我不明白为什么在这种情况下这会成为一项要求:)原因之一:如果必须启动Play,那么在eclipse中运行单个测试会花费很长时间。如果
playtest
找到其他测试并选择性地包含它们,那就太好了。