Play框架功能测试 (functional test in play framework)

来源:互联网 发布:开网店买什么软件好 编辑:程序博客网 时间:2024/04/28 14:27

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 {@Idpublic 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;@Beforepublic 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();}@Testpublic 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或者源码。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 蚂蚱吃了会过敏怎么办 孕妇能吃蚂蚱菜怎么办 孕妇吃了蚂蚁菜怎么办 白果很硬的时候怎么办 有痔疮吃了胡椒怎么办 吃紫菜多了难受怎么办 四川泡菜太酸了怎么办 孕妇吃了白花菜怎么办 怀孕吃了马扎菜怎么办 被铁钉扎伤了脚怎么办 风扇吹得肩膀疼怎么办 胳膊肌肉那块肿了怎么办 生完孩子臀部变宽怎么办 3岁宝宝肋骨外翻怎么办 胸肌正面不明显侧面看才有怎么办 小孩胸肌骨突出外翻怎么办 衣柜隔层板坏了怎么办 科三路线记不住怎么办 喂奶以后胸变小了怎么办 健身完肩膀缝疼怎么办 生过孩子胯部宽怎么办 无肩带文胸往下滑怎么办 内衣肩带老是往下滑怎么办 乳房发育一边大一边小怎么办 母猫乳房有硬块怎么办 19岁乳晕很大乳头很小怎么办 做完俯卧撑胳膊特别痛怎么办 电压低风扇转不动怎么办 小孩不配合康复锻炼怎么办 跑步机安全开关脱落怎么办 办健身卡贵了怎么办 跑步机安全锁丢了怎么办 老公的腿老是疼怎么办 跑步机钥匙丢了怎么办 跑步机磁铁丢了怎么办 瑜伽拉筋拉伤了怎么办康复 大腿拉筋拉伤了怎么办 肚子饿的咕咕叫怎么办 手表折叠扣松了怎么办? 手表链扣松了怎么办? 原车挡泥板碎了怎么办