文档章节

Play 1.x框架学习之一:功能测试 (functional test in play framework)

奋斗到天明
 奋斗到天明
发布于 2015/08/27 16:21
字数 611
阅读 399
收藏 0

Play框架中已经集成了junit框架,大家可以非常方便的进行功能测试,这里我展现一个测试新增的例子,其他的大家可以照这个例子深入。 首先需要在app/modules包中定义一个Beat类,app/controllers中定义一个控制器Beats,同时需要定义个被测试的方法,并在conf/routes配置该方法的url地址,分别如下: app/modules/Beat.java:

package models;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

import play.db.jpa.GenericModel;
@Entity
@Table(name = "beat")
public class Beat extends GenericModel {
	@Id
	public Long id;
	public String words;
	public Long count;
	public Long attime;
}

app/controllers/Beats.java:

package controllers;

import play.db.jpa.JPABase;
import play.mvc.Controller;
import models.Beat;

public class Beats extends Controller{
	public static void add(Beat beat){
		boolean result = beat.create();
		renderText(result);
	}
}

conf/routes片段:

POST        /beat                Beats.add

Play中用yaml格式文件作为测试的数据存储。也提供了相应的解析方法。这里我们将测试的数据分成两部分,一部分用作模拟数据库数据,程序启动的时候,会将这部分数据加载到内存数据库中。另一部作为请求的数据,每次请求的时候会用到。对应的会有两个yaml文件,test/yml/db/beat.yml 和 test/yml/request/beats.yml。 test/yml/db/beat.yml:

Beat(b1):
  id: 1001
  words: this is a happay word
  count: 0
  
Beat(b2):
  id: 1002
  words: preo jobs
  count: 2

test/yml/request/beats.yml:

add_normal:
  beat.id: '1003'
  beat.words: third feel is unok
  beat.count: '0'

这样我们就可以进行功能测试,功能测试类必须继承FunctionalTest,继承之后就可以使用play给我们预置的各种assert方法,还有junit的注解标签。如:test/function/BeatsTest.java。内容:

package function;

import java.util.Map;
import models.Beat;

import org.junit.Before;
import org.junit.Test;
import play.db.jpa.JPA;
import play.mvc.Http.Response;
import play.test.Fixtures;
import play.test.FunctionalTest;

public class BeatsTest extends FunctionalTest{
	Map allRequstMap =null;
	
	@Before
	public void init(){
		allRequstMap = (Map)Fixtures.loadYamlAsMap("yml/request/beats.yml");
    	if(!JPA.em().getTransaction().isActive()){
    		JPA.em().getTransaction().begin();
    	}
    	
    	Fixtures.delete(Beat.class);
    	Fixtures.loadModels("yml/db/beat.yml");
    	JPA.em().getTransaction().commit();
	}
	
	@Test
	public void testAdd(){
		int beforeRequestSize = Beat.findAll().size();
		
		Map map = allRequstMap.get("add_normal");
		Response response = POST("/beat", map);
		assertIsOk(response);
		
		int afterRequestSize = Beat.findAll().size();
		assertEquals(beforeRequestSize, afterRequestSize - 1);
		
		Beat beat = Beat.findById(Long.parseLong(map.get("beat.id")));
		assertNotNull(beat);
		
		String result = response.out.toString();
		assertFalse("null".equals(result));
		assertEquals("true", result);
	} 
}

每次执行@Test方法时,都要先执行init,在init方法中,Fixtures加载解析yaml文件。分别将两个yml文件放入map与内存数据库中。 在testAdd中,使用了FunctionalTest预置的POST发起请求,当然还有其他如PUT/GET/DELETE方法,FunctionalTest也预置的许多assert方法,方便大家的使用,大家可以自己查看API或者源码。

© 著作权归作者所有

共有 人打赏支持
奋斗到天明
粉丝 18
博文 112
码字总数 82707
作品 0
昌平
程序员
分享一个用Scala Play + Slick 开始写的一个学习的开源web app

好, 最近在學Play,用Play在這些天寫了一個初始的app,用的是Play! framework 2.x + Play slick 1.x,前端用的是,原始的bootstrap。已经开源,https://github.com/hellomaya/scala-connec...

自由之信
2016/01/24
904
2
Play Framework 2.0 介绍

Play Framework 刚刚发布了 2.0 正式版,来看看 Play Framework 2.0 的新特性介绍吧。 原生支持 Java 和 Scala Play Framework 1.x 完全是采用 Java 编写的,可通过插件来支持 Scala,而 2....

红薯
2012/03/14
12.7K
20
Play 1.x 学习资料汇总

1.Play!Framework学习笔记:初识Play(http://blog.csdn.net/w302974215/article/details/46926007) 2.Play Framework入门引导(http://somefuture.iteye.com/blog/1985667) 3.Play框架1.2.7版......

IT追寻者
2016/07/22
43
0
Intellij Idea 配置 Play 1.x Framework 开发环境 (configuration Play 1 x Framework development environmen...

虽然在公司使用的是Eclipse,但是我还是很中意俊俏的Intellij Idea(当然还有风骚的Sublime Text),Play 是一个类ROR的框架(Play 1.x 是比较正统的Java框架,Play 2.x混入Scala血统,个人不...

刀狂剑痴
2015/08/27
132
0
最好的8个Java RESTful框架

过去的每一year,涌现出越来越多的Java框架。就像JavaScript,每个人都认为他们知道一个好的框架的功能应该是怎么样的。连我的老祖母现在也使用 一个我从来没有听说过而且可能永远不会使用的...

李景枫
2016/05/03
8.6K
27

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Confluence 6 使用 Fail2Ban 来限制登录尝试

什么是 Fail2Ban? 我们需要在我们网站中防止密码的暴利破解。Fail2Ban 是一个 Python 的应用来查看日志文件,使用的是正则表达式,同时还可以与Shorewall (或者 iptables)直接工作来来启用...

honeymose
10分钟前
0
0
日期和时间API - 读《Java 8实战》

日期与时间 LocalDate 创建一个LocalDate对象并读取其值 // 根据年月日创建日期LocalDate date1 = LocalDate.of(2014, 3, 18);// 读取System.out.println(date1.getYear()); // 2014Sys...

yysue
10分钟前
0
0
8月15日任务

8月15日任务 Memcached命令行 • telnet 127.0.0.1 11211 • set key2 0 30 2 ab STORED get key2 VALUE key2 0 2 ab END 实例: [root@localhost 02]# telnet 127.0.0.1 11211-bash: te......

寰宇01
22分钟前
0
0
LNMP架构(Nginx访问日志、Nginx日志切割、静态文件不记录日志和过期时间)

Nginx访问日志 1.打开配置文件,搜索log_format vim /usr/local/nginx/conf/nginx.conf 2.访问日志常用变量含义 $remote_addr : 客户端IP(公网IP) $http_x_forwarded_for : 代理服务器的IP ...

蛋黄_Yolks
22分钟前
0
0
lombok 不用再写pojo的getset

java实体类不写get/set方法 1、下载地址https://projectlombok.org/download Myeclipse、eclipse安装lombok Lombok是一种Java实用工具,可以帮助开发人员消除Java的冗长,具体看lombok的官网...

木之下
29分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部