您的位置:首页 > 大数据 > 人工智能

Grails自动化测试

2016-02-17 18:00 363 查看
    自动化测试是进行敏捷开发的重要前提,那Grails对自动化测试框架进行了很好的集成。首先Grails创建的项目默认将自动化测试程序(test case)放到test文件夹中,而test文件夹又包含了unit和integration两个子文件夹。这两个的区别在于:

    a:integration文件夹中的test case在运行时需要Grails框架的参与,通常用于数据库的查询与更新测试;

    b:unit文件夹中的通常用于对普通Java对象、Groovy对象进行测试。

   1、Grials自动化测试基础知识

    在使用Grails的命令创建Domain和Controller的时候,Grails会自动创建相应的test case。在test case中可以编写多个名为TEST×××的方法,每一个TEST×××方法都相当于一个测试点,都会被Junit测试框架调用并执行测试。最后通过断言方法,可以对程序的运行结果进行验证,从而实现自动化测试。

    Grials中使用grails test-app命令可以执行测试用例。如果不特殊指定,则会对全部的测试用例进行测试。

    下图为指定需执行的测试类方法(测试类名称为UserControllerTest)

    


    测试用例是在test环境下进行的,运行每一个测试用例之前都会先清空测试环境的数据库。这里需要提示的是,DataSource的配置,一共有三种环境,development、test、production,所以测试数据库等信息的配置需要在test中进行设置。

   2、编写Controller测试用例

    在Grails中,对Controller进行测试,并不是在模拟浏览器的请求,而是通过创建模拟对象,使得Controller运行在某个特定的环境参数下,例如特定的URL参数、表单餐食或者Session等,然后再验证Controller执行后对环境产生的输出。这里的输出就包括跳转、对Session的修改或者返回给GSP的model等等。

    举例测试BreakController中的showPage方法和getList方法

...
//  省略测试类的包名和其他需要import的文件
//  首先需要import待测试的controller
import com.byx.study.repo.BreakController

/**
* BreakController Test 拆分相关测试
* @author LiDan
*/
class BreakControllerTest{
// 初始化controller中引用的Service,由Spring容器注入springSecurityServvice
def springSecurityService
// 这里先定义一个变量,下文中将new的controller赋值给它
def b
// setUp方法,写一些初始化的代码

@Before
public void setUp(){

// 该项目中调用springSecurity校验用户是否登录
assertFalse springSecurityService.loggedIn
// 模拟用户登录
SpringSecurityUtils.reauthenticate "moni001", null

assertTrue springSecurityService.loggedIn
// new controller
b = new BreakUpTestController()
}

@After
public void tearDown(){
SecurityContextHolder.clearContext()
}

// 测试showPage页面,action需要返回值
@Test
public void testShowPage(){
assertTrue springSecurityService.loggedIn
def result = b.breakUpTest()
assert result.schoolNo
}

// 测试getList方法
@Test
public void testGetList(){
assertTrue springSecurityService.loggedIn
// 修改controller实例的params属性的值,用来模拟通过ajax向controller提交数据
b.params.rows = 10
b.params.page = 1
b.getTestListAjax()
assert breakUpTestController.response.json.total
}
}

    Controller向GSP传递数据有两种方式,一种是使用action的返回值,这时返回值将传递给同名GSP页面;另外一种就是使用render方法,通过view指定GSP页面,通过model指定要传递的数据,类似ajax。


    写在最后:

    使用Grails同样可以对Service、Domain和Taglib进行测试。也可以得出关于覆盖率等信息的报告,进而实现测试驱动的开发,有利于我们养成良好的开发习惯。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息