小飞知识库 | YeLu🤠MiLu🤪 小飞知识库 | YeLu🤠MiLu🤪
  • 函数式编程
  • Spring
  • SpringMVC
  • SpringBoot
  • SpringCloud
  • Mybatis
  • JVM
  • JUC并发编程
  • 设计模式
  • 单元测试
  • Redis
  • RabbitMQ
  • mysql
  • oracle
  • linux
  • nginx
  • docker
  • elasticSearch
  • windows
  • 虚拟机
  • 监控系统
  • https
  • 内网穿透
  • 前端文章

    • JavaScript
  • 页面

    • HTML
    • CSS
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • TypeScript
    • JS设计模式总结
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 版本管理

    • Git笔记
  • 项目构建

    • maven
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • JAR包相关
  • 关于
  • 收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

YeLu

爱技术的YeLu🤠
  • 函数式编程
  • Spring
  • SpringMVC
  • SpringBoot
  • SpringCloud
  • Mybatis
  • JVM
  • JUC并发编程
  • 设计模式
  • 单元测试
  • Redis
  • RabbitMQ
  • mysql
  • oracle
  • linux
  • nginx
  • docker
  • elasticSearch
  • windows
  • 虚拟机
  • 监控系统
  • https
  • 内网穿透
  • 前端文章

    • JavaScript
  • 页面

    • HTML
    • CSS
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • TypeScript
    • JS设计模式总结
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 版本管理

    • Git笔记
  • 项目构建

    • maven
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • JAR包相关
  • 关于
  • 收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 函数式编程

  • spring

  • springMVC

  • springCloud

  • jvm

  • JUC并发编程

  • mybatis

  • 设计模式

  • 📒springBoot

  • 单元测试

    • 单元测试问题
    • Junit的使用
      • 基础使用
      • hamcrest 使用
      • suite 使用
        • 准备测试用例1
        • 准备测试用例2
        • 准备启动测试类
      • stub 使用
        • 准备DAO接口
        • 准备业务逻辑层
        • 准备测试类
        • 准备stub的DAO实现
    • dbunit的使用
    • spring的测试
    • spring整合dbunit
    • easymock的使用
  • java
  • 单元测试
YeLu🤠
2025-01-15
目录

Junit的使用

参考demo:G:\学习资料\java\java学习文档\java技术文档\Spring文档\xufei-spring-word\xufei-projo-test => junit、suite、stub

# 基础使用

public class TestCalculator {

    private static Calculator calculator;


    // 初始化这个实例
    // @Before             这个注解的作用就是在测试用例执行之前进行对象实例化的
    // 由 @before修饰的方法  一般情况下用来进行测试的对象以及数据的初始化

    @BeforeClass
    public static void init() {
        System.out.println("我是初始化....");
        calculator = new Calculator();
    }

    //@After
    @AfterClass // 这个注解的作用就是在测试用例执行后执行
    public static void destroy() {
        calculator = null;
    }

    /**
     * 测试加法
     */
    @Test
    public void testAdd() {
        int addResult = calculator.add(1, 1);
        // 执行了结果之后 :判断这个结果和预期结果是否一致
        // 断言 判断结果正确与否
        assertEquals(2, addResult);
    }

    /**
     * 测试这个处罚是否正确
     * expected:希望返回某一类的异常
     * timeout:测试用例执行的超时时间
     */
    @Test(expected = ArithmeticException.class,timeout = 5000)
    public void testCf() {
        int cfResult = calculator.cf(10, 1);
        assertNotNull(cfResult); // 判断这个对象是否不为空
        assertEquals(5,cfResult);

    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

# hamcrest 使用

需求:执行了这个testCf方法执行 我需要进行多个判断

​ 这多个判断 只需要一个满足条件就成立了.....

这个 hamcrest 简单的说就是对原来的Junit的功能的增强

比如:同时成立

​ 一个成立就成立呀

​ 判断null呀 等等 都有封装

    /**
     * 测试这个处罚是否正确
     * expected:希望返回某一类的异常
     * timeout:测试用例执行的超时时间
     */
    @Test(/*expected = ArithmeticException.class,timeout = 5000*/)
    public void testCf() {
        int cfResult = calculator.cf(10, 1);

        // 下面的两个判断  只要其中一个成立了  那么 这个断言就成立了
        // 我在断言的时候 不能单独写成一个一个断言  我需要 写到一起怎么办呢?

        /*assertNotNull(cfResult); // 判断这个对象是否不为空
        assertEquals(5,cfResult);*/

        assertThat(cfResult, AnyOf.anyOf(IsNull.notNullValue(), IsEqual.equalTo(5)));


        /**
         * AnyOf.anyOf:一个成立那么就成立
         *
         * AllOf.allOf():所有成立才成立
         *
         * IsNull.notNullValue():不能是null值
         *
         * IsNull.nullValue():必须是null值
         *
         * IsInstanceOf.instanceOf():必须是某一个类的实例
         *
         * IsAnything:这个表示的是对象其中一个
         *
         * IsNot:不能是某一个数据  或者某一个对象
         */

    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

# suite 使用

场景:我要一起运行多个测试用例

当我们开发好一个功能之后 需要手动的去启动一个一个测试用例 那么 就太浪费时间了 那么怎么办呢?

在这种场景下 suite 就应运而生了

# 准备测试用例1

public class TestCaltuteA {

    private Calculator calculator = null;

    @Before
    public void init() {
        calculator = new Calculator();
    }

    @Test
    public void testAdd() {
        int addResult = calculator.add(1, 1);
        Assert.assertEquals(2, addResult);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 准备测试用例2

public class TestCaltuteB {

    private Calculator calculator =null;

    @Before
    public void init(){
        calculator =new Calculator();
    }

    @Test
    public void testCf(){
        int addResult = calculator.cf(10, 2);
        Assert.assertEquals(5,addResult);
    }

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 准备启动测试类

@RunWith(Suite.class)
// 这里写执行哪些测试类
@Suite.SuiteClasses({TestCaltuteA.class,TestCaltuteB.class})
public class TestCalculatorAB {
}
1
2
3
4
5

# stub 使用

stub:装逼的装

有这样一种场景:我们分层做开发 A做的是业务逻辑层 B做的是DAO层 那么这个时候 当B刚写玩约束规范(DAO接口) 就请假了 结果A把业务逻辑层写完了 要写测试用例了 咋办呢? 那么这个时候A就想到了一种解决这个问题的方式:stub 这种思想

适用场景:DAO有规范但是没有实现的情况下 Service要做测试

# 准备DAO接口

public interface IUserDAO {

    /**
     * 通过id找到用户
     *
     * @param id
     * @return
     */
    User findUserById(int id);

}
1
2
3
4
5
6
7
8
9
10
11

# 准备业务逻辑层

public class UserService {

    private IUserDAO userDAO;

    public void setUserDAO(IUserDAO userDAO) {
        this.userDAO = userDAO;
    }

    /**
     * 测试的方法
     *
     * @return
     */
    public User findUserById(int id) {
        // 中间经历了无数个步骤
        //....
        //....
        return userDAO.findUserById(id);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 准备测试类

public class TestUserService {

    private UserService userService;

    private User exUser;

    @Before
    public void init() {
        userService = new UserService();

        userService.setUserDAO(new UserDAOStub());
        exUser = new User(1, "xff:1", "密码:1");
    }

    /**
     * 测试通过id找用户的这个方法
     */
    @Test
    public void testFindUserById() {
        User useResult = userService.findUserById(1);
        // 接下来进行断言
        Assert.assertEquals(exUser.getUId(), useResult.getUId());
        Assert.assertEquals(exUser.getUName(), useResult.getUName());
        Assert.assertEquals(exUser.getPassWord(), useResult.getPassWord());
    }

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# 准备stub的DAO实现

public class UserDAOStub implements IUserDAO {

    private final Map<Integer, User> userMap = new HashMap<>();


    public UserDAOStub() {
        for (int i = 1; i < 10; i++) {
            userMap.put(i, new User(i, "xff:" + i, "密码:" + i));
        }
    }

    @Override
    public User findUserById(int id) {
        return userMap.get(id);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#单元测试#junit
最近更新: 2025/01/22, 13:46:16
单元测试问题
dbunit的使用

← 单元测试问题 dbunit的使用→

最近更新
01
服务端配置
07-30
02
frp 安装
07-30
03
Prometheus采集Springboot应用
02-20
更多文章>
Theme by Vdoing | Copyright © 2019-2025 | YeLu🤠MiLu🤪 | MIT License 蜀ICP备2024116879号 | 川公网安备51012202001998号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
欢迎你,我的朋友
看板娘