(快速参考)

测试中

4.0.2

测试中

365bet地区自动化测试是365bet地区的关键部分,因此365bet地区提供了许多使测试更容易的方法,从低级单元测试到高级功能测试,这一部分详细介绍了365bet地区为测试提供的不同功能。

首先要注意的是创建生成命令创建单元要么积分自动测试例如,如果您运行命令如下

grails创建控制器com acme应用程序简单

365bet地区365bet地区将在以下位置创建一个控制器grails应用程序控制器com acme应用程序SimpleController groovy还有一个单元测试src测试groovy com acme应用程序SimpleControllerSpec groovy365bet地区但是365bet地区不会做的是填充测试中的逻辑,这取决于您

默认的类名后缀是测验365bet地区但从365bet地区起,测试也被支持

运行测试

测试使用测试应用命令

365bet地区测试应用

该命令将产生如下输出

运行单元测试运行测试FooTests FAILURE单元测试已完成 464毫秒测试失败了: 0错误1失败

同时显示每次测试失败的原因

您可以通过以下方式在运行测试之前强制执行清除操作:清洁测试应用命令

365bet地区365bet地区会将纯文本和HTML测试报告都写入目标测试报告目录以及原始XML文件通常,HTML报告是最好的报告

365bet地区使用365bet地区互动模式在执行测试时具有一些明显的优势首先,测试将在第二次和随后的运行中明显更快地执行。其次,可以使用快捷方式在浏览器中打开HTML报告

打开测试报告

您还可以在大多数IDE中运行单元测试

定位测试

您可以有选择地将测试目标定位为以不同的方式运行为名为的控制器运行所有测试SimpleController你会跑

grails测试应用程序SimpleController

这将对名为的类运行任何测试SimpleController可以使用通配符

365bet地区测试应用程序控制器

这将测试所有以结尾的类控制者包名称可以选择指定

grails测试应用程序某些组织控制器

或运行一个包中的所有测试

grails测试一些组织的应用程序

或运行包含子包的包中的所有测试

grails测试一些组织的应用程序

您还可以针对特定的测试方法

grails测试应用程序SimpleController testLogin

这将运行TESTLOGIN在测试SimpleController测试您可以根据需要指定任意多个组合模式

grails测试应用程序一些组织SimpleController testLogin BookController
365bet地区在365bet地区 x中添加重新运行作为参数只能运行在先前测试应用程序运行中失败的测试
365bet地区在365bet地区 x中,您可能需要在类名称之前指定包名称,并在末尾附加Spec。例如,如果要对ProductController运行测试,则应使用365bet地区测试应用程序ProductControllerSpec请注意,如果您不想键入整个程序包层次结构,则可以使用星号

调试

为了通过远程调试器调试测试,您可以添加调试JVMils在任何这样的命令中

grails调试jvm测试应用程序

这将打开默认的Java远程调试端口,供您从所选的编辑器IDE连接远程调试器。

365bet地区这与365bet地区和之前的版本不同365bet地区调试

定位测试阶段

除了定位某些测试之外,您还可以定位测试阶段365bet地区默认情况下,365bet地区有两个测试阶段单元积分

365bet地区365bet地区 x的用途相型365bet地区

执行单元您可以运行的测试

365bet地区测试应用程序单元

奔跑积分您将运行的测试

使用阶段时的定向测试

测试和阶段定位可以同时应用

这将在单元一些组织或子包

单元测试

单元测试是在单元级别进行的测试。换句话说,您正在测试单个方法或代码块,而不考虑周围的基础结构。单元测试通常在不存在涉及IO的物理资源(例如数据库套接字连接或文件)的情况下运行。因为快速反馈很重要,所以它们运行得尽可能快

365bet地区由于365bet地区365bet地区用于所有单元测试此支持提供了一组特征下面是一个示例hello world测试

 spock lang规格
 365bet地区测试Web控制器ControllerUnitTest

 HelloControllerTests 延伸规格实施ControllerUnitTest {

    虚空 "测试消息动作"() {
        什么时候:"消息动作被调用"控制器讯息然后:"你好回来了"回应文字'你好'
    }
}

365bet地区有关使用365bet地区测试支持编写测试的更多信息,请参见专用文件.

365bet地区以下365bet地区的版本使用了365bet地区365bet地区测试Mixin框架这是基于TestMixin365bet地区AST转换该库已被更简单,更基于IDE友好特征的实现所取代,但是您仍然可以通过将以下依赖项添加到365bet地区应用程序中来使用它

建立gradle
测试编译"组织grails grails测试mixins"

365bet地区例如,如果您要将现有应用程序升级到365bet地区 x,这可能会很有用。

整合测试

365bet地区集成测试与单元测试的不同之处在于,您可以完全访问测试中的365bet地区环境。您可以使用创建集成测试命令

$grails创建集成测试示例

上面的命令将在该位置创建一个新的集成测试src集成测试groovyExampleSpec常规.

365bet地区365bet地区使用测试环境进行集成测试,并在第一次测试运行之前加载应用程序。所有测试都使用相同的应用程序状态

交易次数

集成测试方法默认在其自己的数据库事务中运行,该事务在每个测试方法结束时都会回滚,这意味着测试期间保存的数据不会持久保存到所有测试共享的数据库中。默认生成的集成测试模板包括回滚注解

 grails测试mixin集成集成
 grails gorm交易
 斯波克长

积分
回滚
 ExampleSpec 延伸规格无效"测试一些"() {
        期望:"整我"
             == 
    }
}

回滚批注确保每个测试方法都在回滚的事务中运行通常,这是可取的,因为您不希望测试取决于订单或应用程序状态

365bet地区在365bet地区中测试依赖grails gorm事务回滚注释以在集成测试中绑定会话尽管每个测试方法事务都回滚了设定设定设置数据并将其持久保存,如下例所示

 grails测试mixin集成集成
 grails gorm交易
 斯波克长

积分
回滚
 规格书 延伸规格虚空设定下面的线将持续存在并且不会回滚
         (: '行动中的365bet地区'保存齐平: )
    }

    虚空 "测试一些"() {
        期望:
        计数1
    }
}

要自动回滚设置逻辑,需要从测试方法本身调用任何持久性操作,以便它们在测试方法的回滚事务中运行。设置

 grails测试mixin集成集成
 grails gorm交易
 斯波克长

积分
回滚
 规格书 延伸规格虚空设置下面的线会回滚
         (: '行动中的365bet地区'保存齐平: )
    }

    虚空 "测试一些"() {
        给定设置期望:
        计数1
    }
}

使用Spring的Rollback注释

回滚代替

 grails测试mixin集成集成
 org springframework测试注释回滚
 斯波克长

积分
回滚
 规格书 延伸规格虚空设定 (: '行动中的365bet地区'保存齐平: )
    }

    虚空 "测试一些"() {
        期望:
        计数1
    }
}
不可能使grails gorm事务回滚行为与Spring的Rollback注释相同,因为grails gorm事务回滚转换类的字节码,消除对Spring版本要求的代理的需要

如果您确实有一系列可以共享状态的测试,则可以删除回滚套件中的最后一个测试应具有注释,它将关闭环境并重新启动它,请注意,这将影响测试运行时间

自动接线

要获得对Bean的引用,可以使用自动接线注释例如

导入org springframework bean工厂注释积分
回滚
 ExampleServiceSpec 延伸规格自动接线ExampleService exampleService无效"测试示例服务"() {
        期望0
    }
}

测试控制器

要集成测试控制器,建议您使用创建功能测试命令以创建Geb功能测试有关更多信息,请参见以下功能测试部分

功能测试

功能测试涉及针对正在运行的应用程序发出HTTP请求并验证结果行为,这对于端到端测试场景非常有用,例如针对JSON API进行REST调用

365bet地区默认情况下,365bet地区附带支持使用Geb框架要创建功能测试,您可以使用创建功能测试命令将创建一个新的功能测试

$

上面的命令将创建一个新的Spock规范,名为MyFunctionalSpec常规在里面src集成测试groovy目录测试带有注释积分注释以表明它是一个集成测试,并扩展了GebSpec超一流

积分
 家庭规格 延伸GebSpec定义 设定() {
    }

    定义 清理() {
    }

    虚空 "测试主页渲染正确"() {
        什么时候:"访问主页"'/'

        然后:"标题正确"
            $('标题'文本"365bet地区欢迎来到365bet地区"
    }
}

运行测试时,应用程序容器将在后台加载,您可以使用Geb API向正在运行的应用程序发送请求

请注意,在整个测试运行中,应用程序仅加载一次,因此功能测试在整个套件中共享应用程序的状态

此外,将应用程序作为测试加载到JVM中,这意味着该测试具有对应用程序状态的完全访问权限,并且可以直接与数据服务(例如GORM)进行交互以设置和清除测试数据

积分注释支持可选applicationClass属性,可用于指定要用于功能测试的应用程序类。该类必须扩展365bet地区AutoConfiguration.

积分applicationClass com演示应用程序 家庭规格 延伸GebSpec// ...

}

如果applicationClass如果未指定,则测试运行时环境将尝试动态定位应用程序类,这在可能存在多个应用程序类的多项目构建中可能会出现问题

默认情况下,运行服务器端口时将被随机分配积分批注添加了的属性服务器端口如果您想知道应用程序正在哪个端口上运行,则不需要使用您可以使用的测试类。GebSpec如上所示,但可能是有用的信息

如果您想在由服务器端口您需要手动注释测试的配置属性春天开机测试:

 grails测试mixin集成集成
 org springframework引导测试上下文SpringBootTest
 spock lang规格

积分
春天开机测试webEnvironment SpringBootTest WebEnvironment定义的端口 我的规格 延伸规格// ...

}