在运行测试用例之前初始化所需的测试数据。
你是否有这样的经历。当你遇到需要测试数据库相关操作的时候,在每次测试之前,反复通过ui来改变数据库的数据。这件事情可以交给ScaffoldUit来做。
当前只通过了MySQL的测试
Mave依赖
<depedecy><groupId>org.crazycake</groupId><artifactId>ScaffoldUit</artifactId><versio>1.0.0-RELEASE</versio></depedecy>快速开始STEP1.创建ScaffoldUit.properties在项目的classpath根目录下创建 ScaffoldUit.properties ,比如src/mai/resources
ScaffoldUit.jdbc.url=jdbc:mysql://localhost:3306/suit_test?useUicode=true&characterEcodig=UTF-8 ScaffoldUit.jdbc.userame=root ScaffoldUit.jdbc.password=123456STEP2.创建测试数据库创建一个测试数据库 suit_test 建立一个表 studet
CREATE TABLE `studet` ( `id` it(11) NOT NULL, `ame` varchar(32) default NULL, PRIMARY KEY (`id`) ) ENGINE=IoDB DEFAULT CHARSET=utf8;STEP3.创建测试用例创建类 HelloScaffoldUitTest.java ,有一个测试方法 testBuild.
package org.crazycake.ScaffoldUit; import java.io.IOExceptio; import java.sql.Coectio; import java.sql.DriverMaager; import java.sql.SQLExceptio; import java.sql.Statemet; import static org.hamcrest.CoreMatchers.*; import org.juit.Test; public class HelloScaffoldUitTest { @Test public void testBuild() throws IOExceptio, SQLExceptio, ClassNotFoudExceptio{ //1 build the scaffold data ScaffoldUit.build(); //2 test your code Class.forName("com.mysql.jdbc.Driver"); Coectio co = ull; co = DriverMaager.getCoectio("jdbc:mysql://localhost:3306/suit_test?useUicode=true&characterEcodig=UTF-8","root", "123456"); Statemet stat = co.createStatemet(); stat.execute("update studet set ame='ted' where ame='jack'"); stat.close(); co.close(); //3 assert your result ScaffoldUit.dbAssertThat("select ame from studet where id=1", is("ted")); } }STEP4.创建jso文件ScaffoldUit需要一个jso文件作为告诉ScaffoldUit如何初始化数据库,在test/resources下建立跟你的java类一样的文件路径结构,比如你的测试类全名是org.crazycake.ScaffoldUit么你建立的jso文件路径是这样的 test/resources/org/crazycake/ScaffoldUit/ScaffoldUitTest.jso.
{ "ms":[ { "":"testBuild", "ts":[ { "t":"studet", "rs":[ [ { "c":"id", "v":"1" }, { "c":"ame", "v":"'jack'" } ] ] } ] } ] }这个jso文件告诉ScaffoldUit在做 testBuild 测试之前做两件事情
1.trucate suit_hello . 2.插入一条数据id=3,ame='jack'.
STEP5.运行测试用例!运行测试用例,看日志
2014-09-21 17:55:37 DEBUG ScaffoldUitDao:47 - ScaffoldUit.jdbc.url=jdbc:mysql://localhost:3306/suit_test?useUicode=true&characterEcodig=UTF-82014-09-21 17:55:37 DEBUG ScaffoldUitDao:50 - ScaffoldUit.jdbc.userame=root2014-09-21 17:55:37 DEBUG ScaffoldUitDao:53 - ScaffoldUit.jdbc.password=qwer12342014-09-21 17:55:37 DEBUG ScaffoldUitDao:73 - trucate table studet2014-09-21 17:55:37 DEBUG ScaffoldUitDao:73 - isert ito studet (id,ame) values (1,'jack')2014-09-21 17:55:37 DEBUG ScaffoldUitDao:104 - select ame from studet where id=1介绍不需要在测试后恢复数据,只需要在测试前初始化他们即可ScaffoldUit wo'trecoverthetestdata.Istead,itcleaalldataofthetableswhichtestcasewilluseadiitializethedata.
xxxx.jso介绍那个jso文件
属性介绍ms:方法的集合
:方法名
ts:表的集合
t:表名
rs:需要插入的行集合
c:需要插入的行的列
v:值
如果你只想清理数据如果你只想清理这个表的数据但是不插入数据,可以不写rs属性:
{ "t":"emo_clea" }属性的书写ScaffoldUit只是进行单纯的字段拼接而已,所以如果是字符串的属性要加上单引号
{ "c":"ame", "v":"'jack'" }更复杂一点的例子{ "ms": [{ "": "testComeAdBiteMe", "ts": [{ "t": "emo_hello", "rs": [[{ "c": "id", "v": "1" }, { "c": "ame", "v": "'foo'" }], [{ "c": "id", "v": "2" }, { "c": "ame", "v": "'bar'" }]] }] }, { "": "testBuild", "ts": [{ "t": "emo_hello", "rs": [[{ "c": "id", "v": "3" }, { "c": "ame", "v": "'mike'" }], [{ "c": "id", "v": "4" }, { "c": "ame", "v": "'kitty'" }]] }, { "t": "emo_clea" }] }]}构建的方法在测试方法的第一行调用 ScaffoldUit.build() 你还可以调用这些方法: comeAdBiteMe iHateWorkOvertime screwU myBossIsAMuggle ad wtf.效果跟 build(),一样。
数据库版本的assertThat为了断言的方便 ScaffoldUit 提供了 dbAssertThat .这个方法会把你传入的sql的查询结果的第一行的第一个列的值拿出来比较。例子
import static org.hamcrest.CoreMatchers.*;... ScaffoldUit.dbAssertThat("select ame from studet where id=1", is("ted"));自动初始化数据结构ScaffoldUit 提供了一个方式可以自动初始化数据结构.创建一个sqlfileScaffoldUit.sql 在classpath根目录下.当ScaffoldUit 构建测试数据的时候如果遇到表不存在的异常,会试着用这个文件创建数据结构
ScaffoldUit.sql 的一个例子.我是用SQLyog导出的这个sql文件。
/* SQLyog Ultimate v8.71 MySQL - 5.0.51b-commuity-t : Database - emo_test ********************************************************************* */ /*!40101 SET NAMES utf8 */; /*!40101 SET SQL_MODE=''*/; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; /*Table structure for table `emo_clea` */ DROP TABLE IF EXISTS `emo_clea`; CREATE TABLE `emo_clea` ( `id` it(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=IoDB DEFAULT CHARSET=utf8; /*Table structure for table `emo_hello` */ DROP TABLE IF EXISTS `emo_hello`; CREATE TABLE `emo_hello` ( `id` it(11) NOT NULL, `ame` varchar(32) default NULL, PRIMARY KEY (`id`) ) ENGINE=IoDB DEFAULT CHARSET=utf8; /*Table structure for table `studet` */ DROP TABLE IF EXISTS `studet`; CREATE TABLE `studet` ( `id` it(11) NOT NULL, `ame` varchar(300) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=IoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
评论