Play框架功能测试 (functional test in play framework)
2017-02-13 09:31
561 查看
Play框架中已经集成了junit框架,大家可以非常方便的进行功能测试,这里我展现一个测试新增的例子,其他的大家可以照这个例子深入。 首先需要在app/modules包中定义一个Beat类,app/controllers中定义一个控制器Beats,同时需要定义个被测试的方法,并在conf/routes配置该方法的url地址,分别如下:
app/modules/Beat.Java:
app/controllers/Beats.java:
conf/routes片段:
Play中用yaml格式文件作为测试的数据存储。也提供了相应的解析方法。这里我们将测试的数据分成两部分,一部分用作模拟数据库数据,程序启动的时候,会将这部分数据加载到内存数据库中。另一部作为请求的数据,每次请求的时候会用到。对应的会有两个yaml文件,test/yml/db/beat.yml
和 test/yml/request/beats.yml。 test/yml/db/beat.yml:
test/yml/request/beats.yml:
这样我们就可以进行功能测试,功能测试类必须继承FunctionalTest,继承之后就可以使用play给我们预置的各种assert方法,还有junit的注解标签。如:test/function/BeatsTest.java。内容:
每次执行@Test方法时,都要先执行init,在init方法中,Fixtures加载解析yaml文件。分别将两个yml文件放入map与内存数据库中。 在testAdd中,使用了FunctionalTest预置的POST发起请求,当然还有其他如PUT/GET/DELETE方法,FunctionalTest也预置的许多assert方法,方便大家的使用,大家可以自己查看API或者源码。
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或者源码。
相关文章推荐
- Play 1.x框架学习之四:定时作业调度 (job scheduler In play framework)
- All-In-One Code Framework: 微软一站式开发技术框架解决方案 2009-7-30 新增sample code简介
- 微软一站式技术框架(All-In-One Code Framework(AIO)) 登陆 MSDN中国首页
- QT图形视图框架(The Graphics View Framework in QT)
- 2013 最新的 play web framework 版本 1.2.3 框架学习文档整理
- junit.framework.AssertionFailedError: No tests found in com.hyh.test.MainTest
- All-In-One Code Framework: 微软一站式开发技术框架解决方案 2009-6-14 新增sample code简介
- Play Framework 错误信息显示 (error message display In play framework)
- 实体框架在WinForms(转载) Entity Framework in WinForms
- FCT——Functional Circuit Test(即:功能测试)
- TestFrameWork API接口测试框架
- All-In-One Code Framework: 微软一站式开发技术框架 2009-9-17 新增代码示例简介
- All-In-One Code Framework 微软一站式开发技术框架解决方案 中文说明
- SyntaxError: invalid syntax in Play Framework 1.1
- using gzip encoding in play framework
- All-In-One Code Framework: 微软一站式开发技术框架解决方案 2009-8-26 新增sample code简介
- [play framework] Seperate the admin, and build it as a module in play framework
- Play Framework Cookbook (play框架食谱...)3
- 解决Scala Play框架在Git Bash运行的异常:Could not find configuration file ../framework/sbt/sbt.boot.properties
- Play Framework 统一校验机制 (common way to validate in play framework)