Grails自动化测试

    自动化测试是进行敏捷开发的重要前提,那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进行测试。也可以得出关于覆盖率等信息的报告,进而实现测试驱动的开发,有利于我们养成良好的开发习惯。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值