(2).mybatis单元测试(junit测试)

更新时间:2023-05-12 02:29:47 阅读: 评论:0

(2).mybatis单元测试(junit测试)
⼀、Junit使⽤步骤:
1、创建测试⽬录,(src、测试⽬录是test)
2、在测试⽬录test中创建与src中相同的包名
3、为需要测试的类创建测试类,例如:UrsMapper,测试类是UrsMapperTest
4、为被测试类(UrsMapper)中的需要测试的⽅法在测试类型创建相应的⽅法。⽐如,需要测试findById⽅法,那么则测试类中创建findById⽅法,测试⽅法的要求
a、不能有返回值、不能有参数
b、需要只⽤@Test注解对该⽅法进⾏注解。
5、在测试⽅法中,使⽤断⾔对结果进⾏判断,asrt,判断
⼀。单元测试
1. 在项⽬下创建⼀个⽬录test,之后将test右键Mark Directory as(标记⽬录为)->测试源根
2. 在test下创建类,类的包名与被测试类的包名⼀致,在被测试类后⾯加上Test,例如:com.dao.UrsMapper与
com.dao.UrsMapperTest。在测试⽅法前@Test,导⼊junit测试路径,点击确定即可,之后maven后台下载。
3. Mybatis的核⼼对象:SqlSessionFactoryBuilder , SqlSessionFactory , SqlSession。(SqlSessionFactoryBuilder创建⼯⼚,⼀般只⽤⼀
次。SqlSessionFactory是⼯⼚,⼯⼚长期存在。SqlSession例如是⼯⼚造的汽车,有时间期限,即使⽤完⼯⼚依旧存在。)                                            SqlSeessionFactoryBuilder⽤过即丢,可⽤来创建多个SqlSessionFactory实例,并提供多个build⽅法的重载来构建SqlSessionFactory.    SqlSession(⼀般瞬时、短链接,也可以长连接,⽤完关闭)
build(InputStream inputStream,String environment,Properties properties)
build(Reader reader,String environment,Properties properties)
build(Configuration config)
配置信息以三种形式提供给 SqlessionFactoryld 的build ⽅法:
InputStream(字节流) Reader (字符流) Configuration (类)
读取XML⽂件构造⽅式:
String CONFIG_FILE = "l";
InputStream resourceAsStream = ResourceAsStream(CONFIG_FILE);
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder().build(resourceAsStream);
//⾮静态成员,实例成员,成员变量,通过构造⽅法初始化。静态函数,成员通过静态代码块初始化
4. 实现测试⽅法,在每个测试⽅法之前加@Test,实例化Session(建议通过⼯⼚获取,不建议通过new获取。)写测试⽅法,之后进⾏断
⾔操作Asrt。Asrt.asrtNotNull(ur),断⾔成功就是=true,断⾔失败,后⾯的代码不会执⾏了。eg:
1package com.dao;
2
3import com.bean.Urs;
4import org.apache.ibatis.io.Resources;
5import org.apache.ibatis.ssion.SqlSession;
6import org.apache.ibatis.ssion.SqlSessionFactory;
7import org.apache.ibatis.ssion.SqlSessionFactoryBuilder;
8import org.junit.Asrt;
9import org.junit.Test;
10
11import java.io.IOException;
12import java.io.InputStream;
13
14public class UrsMapperTest {
15static final String CONFIG_FILE = "l";
16static SqlSessionFactory factory;
17//⾮静态成员,实例成员,成员变量,通过构造⽅法初始化。静态函数,成员通过静态代码块初始化
18static{  // 静态代码块
19        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
20try {
21            InputStream resourceAsStream =
22                    ResourceAsStream(CONFIG_FILE);
23            factory = builder.build(resourceAsStream);
24        } catch (IOException e) {
25            e.printStackTrace();
26        }
27    }
28    @Test
29public void findById()
30    {
31        SqlSession ssion = factory.openSession();//⼀般通过⼯⼚获取,不建议通过new获取。
32        Urs ur = ssion.lectOne("com.dao.UrsMapper.findById", 1);
33        ssion.clo();
34
35        Asrt.asrtNotNull(ur);
36        Asrt.asrtEquals("管理员",ur.getNickname());
37        Asrt.asrtEquals("123",ur.getPwd());
38
39    }
40 }
测试结果:
1  org.apache.ibatis.logging.LogFactory    - Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
2 18  DEBUG [main] org.apache.ibatis.datasource.pooled.PooledDataSource    - PooledDataSource forcefully clod/removed all connections.
3 19  DEBUG [main] org.apache.ibatis.datasource.pooled.PooledDataSource    - PooledDataSource forcefully clod/removed all connections.
4 19  DEBUG [main] org.apache.ibatis.datasource.pooled.PooledDataSource    - PooledDataSource forcefully clod/removed all connections.
5 19  DEBUG [main] org.apache.ibatis.datasource.pooled.PooledDataSource    - PooledDataSource forcefully clod/removed all connections.
6 142  DEBUG [main] org.ansaction.jdbc.JdbcTransaction    - Opening JDBC Connection
7 531  DEBUG [main] org.apache.ibatis.datasource.pooled.PooledDataSource    - Created connection 558187323.
8 534  DEBUG [main]          com.dao.UrsMapper.findById    - ooo Using Connection [sql.cj.jdbc.ConnectionImpl@2145433b]
9 535  DEBUG [main]          com.dao.UrsMapper.findById    - ==>  Preparing: lect id,nickname,realname,pwd,phone,email,address,create_time
createTime,type,realid from n_urs where id = ?
10 582  DEBUG [main]          com.dao.UrsMapper.findById    - ==> Parameters: 1(Integer)
11 628  TRACE [main]          com.dao.UrsMapper.findById    - <==    Columns: id, nickname, realname, pwd, phone, email, address, createTime,
type, realid
12 628  TRACE [main]          com.dao.UrsMapper.findById    - <==        Row: 1, 管理员, null, 123, null, null, null, 2019-10-09 10:06:39, 0, null
13 633  DEBUG [main] org.ansaction.jdbc.JdbcTransaction    - Retting autocommit to true on JDBC Connection
[sql.cj.jdbc.ConnectionImpl@2145433b]
14 633  DEBUG [main] org.ansaction.jdbc.JdbcTransaction    - Closing JDBC Connection
[sql.cj.jdbc.ConnectionImpl@2145433b]
15 633  DEBUG [main] org.apache.ibatis.datasource.pooled.PooledDataSource    - Returned connection 558187323 to pool.
16
17进程完成,退出码 0
到此单元测试就完成了,接下来是⼀个完整的代码。
5. 单元测试总结代码:
1package com.dao;
2
3import com.bean.Urs;
4import org.apache.ibatis.io.Resources;
5import org.apache.ibatis.ssion.SqlSession;
6import org.apache.ibatis.ssion.SqlSessionFactory;
7import org.apache.ibatis.ssion.SqlSessionFactoryBuilder;
8import org.junit.Asrt;
9import org.junit.Test;
10
11import java.io.IOException;
12import java.io.InputStream;
ParException;
SimpleDateFormat;
15import java.util.Calendar;
16import java.util.List;
17import java.util.Date;
18public class UrsMapperTest {
19static final String CONFIG_FILE = "l";
20static SqlSessionFactory factory;
21static{  // 静态代码块
22        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
23try {
24            InputStream resourceAsStream =
25                    ResourceAsStream(CONFIG_FILE);
26            factory = builder.build(resourceAsStream);
27        } catch (IOException e) {
28            e.printStackTrace();
29        }
30    }
31    @Test  // Alt+enter
32public void findById(){
33        SqlSession ssion = factory.openSession();
34        Urs ur = ssion.lectOne("com.dao.UrsMapper.findById", 1);
35// ⼿⼯的、⾁眼的、主观的、⼈品的⽅式判断程序的成熟度
36        System.out.println();// TRACE/DEBUG/INFO/ERROR
37// ⾃动的、断⾔的、客观的、量化的⽅式判断程序的成熟度
38        Asrt.asrtNotNull(ur);
39        Asrt.asrtEquals("管理员",ur.getNickname());
40        Asrt.asrtEquals("123",ur.getPwd());
41        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
42        String date = df.CreateTime());
43        Asrt.asrtEquals("2019-10-09 10:06:39",date);
44    }
45    @Test
46public void findAll(){
47        SqlSession ssion = factory.openSession();
48        List<Urs> list = ssion.lectList("com.dao.UrsMapper.findAll");
49        Asrt.asrtNotNull(list);
50        Asrt.asrtEquals(3,list.size());<!--!验证表⾥记录条数-->
52        Asrt.asrtEquals("管理员",(0).getNickname());
53    }
54    @Test
55public void add(){
56        Urs ur = new Urs();
57        ur.tNickname("zhaoliu");
58        ur.tRealname("赵六");
59        ur.tPhone("11111");
60        ur.tEmail("");
61        ur.tAddress("111");
62        ur.tPwd("123");
63        ur.tCreateTime(new java.util.Date());
64        SqlSession ssion = factory.openSession();
65        ssion.inrt("com.dao.UrsMapper.add",ur);
66        it();                                                        <!--!提交事务-->
67        Urs urDb = ssion.lectOne("com.dao.UrsMapper.findById",6);      <!--!id以实际为准-->
68        Asrt.asrtNotNull(urDb);
69        Asrt.asrtEquals("赵六",Realname());
70        ssion.clo();
71    }
72    @Test
73public void update() throws ParException {
74        SqlSession ssion = factory.openSession();
75        Urs dbUr = ssion.lectOne("com.dao.UrsMapper.findById",6);
76        Asrt.asrtNotNull(dbUr);
77        dbUr.tNickname("zhaoliu");
78// 2020-03-03 14:13:23 => 2019-10-09 10:11:42 : 2种
79/*Calendar cl = Instance(); // 当前时间
80        cl.t(Calendar.YEAR,2019);
81        cl.t(Calendar.MONTH,9);  // 0-11
82        cl.t(Calendar.DAY_OF_MONTH,9);  // 1-31
83        cl.t(Calendar.HOUR_OF_DAY,10);  // 0-23
84        cl.t(Calendar.MINUTE,11);    // 1-60
85        cl.t(Calendar.SECOND,42);    // 1-60
86        cl.t(Calendar.MILLISECOND,0);  Date Time();*/
87        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
88        Date date = df.par("2020-10-09 10:11:43");    //常⽤于判断从⽹络接受的时间
89        dbUr.tCreateTime(date);
90        ssion.update("com.dao.UrsMapper.update",dbUr);
91        it();
92        Urs ur = ssion.lectOne("com.dao.UrsMapper.findById",6);
93        Asrt.asrtNotNull(ur);
94        Asrt.asrtEquals("zhaoliu",ur.getNickname());
95        Asrt.asrtEquals(CreateTime());
96    }
97    @Test
98public void delete(){
99// hibernate,mybatis
100// 主从表/⽗⼦表的概念?主表-主键所在的表,从表-外键所在的表
101// 1、添加数据:先为主表添加数据,后为从表添加数据
102// 2、删除数据:先删除从表数据,然后删除主表数据
103// n_urs (主表) 的从表:n_news,n_replys,n_short_replys,n_access_logs
104// a主->b从->c从->d从,不创建外键(外键关系是存在的)
105        SqlSession ssion = factory.openSession();
106        ssion.delete("com.dao.AccessLogsMapper.deleteByUrsId",6);
107        ssion.delete("com.dao.ShortReplysMapper.deleteByUrsId",6);
108        ssion.delete("com.dao.ReplysMapper.deleteByUrsId",6);
109        ssion.delete("com.dao.NewsMapper.deleteByUrsId",6);
110        ssion.delete("com.dao.UrsMapper.delete",6);
111        it();
112        Urs ur = ssion.lectOne("com.dao.UrsMapper.findById",6);
113        Asrt.asrtNull(ur);
114    }
115 }
在执⾏删除操作时,记得删除外键⾥的记录,后删除主键内的记录。    // 主从表/⽗⼦表的概念?主表-主键所在的表,从表-外键所在的表
101        // 1、添加数据:先为主表添加数据,后为从表添加数据
102        // 2、删除数据:先删除从表数据,然后删除主表数据
103        // n_urs (主表) 的从表:n_news,n_replys,n_short_replys,n_access_logs
104        // a主->b从->c从->d从,不创建外键(外键关系是存在的)
6. 之后依次把实体类,实现Mapper,并在主配置⽂件中配置,Mapper。
7. 学会审视⾃⼰的代码,=》审查(语法错误,逻辑错误)、优化、重构。
8. 增加⽅法:@Before:是表⽰在每⼀个测试⽅法执⾏前,都会调⽤该⽅法。
9. 增加⽅法:@BeforeClass:是表⽰在多个单元测试⽅法中,⽆论有多少个测试⽅法,都只执⾏⼀次。

本文发布于:2023-05-12 02:29:47,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/593569.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:测试   成员   删除   创建   判断   数据   静态   外键
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图