当前位置: 首页 > news >正文

Java 的单元测试

有点需要注意,当 JUnit 主线程退出,子线程也会跟着退出,需要使用子线程的 join() 方法使主线程等待

Maven 依赖

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.7</version>
    <scope>test</scope>
</dependency>
// src/main/java/club/seliote/App.java
package club.seliote;

public class App 
{
    public int add(int first, int second) {
        return first + second;
    }

    public int exception() {
        throw new NullPointerException();
    }
}
// src/test/java/club/seliote/AppTest.java
package club.seliote;

import org.junit.*;

/**
 * Unit test for simple App.
 */
public class AppTest 
{
    /**
     * 用于保存 @Before 生成的数据
     */
    private App app = null;

    /**
     * 每个测试方法执行前都需要重新构造对象
     */
    public AppTest() {
        super();
        System.out.println("#Constructor");
    }

    /**
     * static 方法,测试类中第一个执行
     */
    @BeforeClass
    public static void beforeClassTest() {
        System.out.println("#BeforeClass");
    }

    /**
     * 初始化一些每个 @Test 方法都会用到的数据
     */
    @Before
    public void beforeTest() {
        this.app = new App();
        System.out.println("#Before");
    }

    @Test
    public void testAdd() {
        System.out.println("#TestAdd");
        Assert.assertEquals(6, this.app.add(3, 3));
        if (8 != this.app.add(1, 7)) {
            Assert.fail("Something error!");
        }
    }

    /**
     * 超时测试
     */
    @Test(timeout = 100)
    public void testTimeout() {
        Math.pow(10, 100);
    }

    /**
     * 异常测试
     */
    @Test(expected = NullPointerException.class)
    public void testIO() {
        System.out.println("#TestException");
        this.app.exception();
    }

    @After
    public void afterTest() {
        this.app = null;
        System.out.println("#After");
    }

    @AfterClass
    public static void afterClassTest() {
        System.out.println("#AfterClass");
    }
}

// output :
// #BeforeClass
// #Constructor
// #Before
// #After
// #Constructor
// #Before
// #TestAdd
// #After
// #Constructor
// #Before
// #TestException
// #After
// #AfterClass

转载于:https://www.cnblogs.com/seliote/p/9651843.html

相关文章:

  • 以下不属于时序逻辑电路的有_学习笔记:时序电路基础
  • 【字符串处理】关于KMP算法输出的是什么代码
  • 好分数阅卷3.0_揭秘!自考阅卷的批改套路!
  • 手机沙盒隔离软件_最好别装手机杀毒软件,不仅没用反而是累赘!
  • 一个简单的注册页面
  • 主进程和子进程_Python 简明教程 26,Python 多进程编程
  • golang文件下载断点续传(下载客户端)
  • 天体运行轨迹_按彗星轨迹,太阳系中存在第二平面,有可能是彗星的“第二家园”...
  • 一个网页打开的全过程
  • 环境图配置不存在pbr_[翻译]你也可以制作的PBR!
  • 单引号和双引号的区别
  • 前端缓动画为什么不能有小数_前端兼容性的一些问题
  • luogu4187 [USACO18JAN]Stamp Painting (dp)
  • jsencrypt vue使用_在VUE中使用RSA加密解密加签解签__Vue.js
  • Learning-Python【6】:Python数据类型(2)—— 列表、元组
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • Gradle 5.0 正式版发布
  • Hibernate【inverse和cascade属性】知识要点
  • JAVA SE 6 GC调优笔记
  • java 多线程基础, 我觉得还是有必要看看的
  • JavaScript设计模式与开发实践系列之策略模式
  • Python十分钟制作属于你自己的个性logo
  • RxJS: 简单入门
  • Spring Boot MyBatis配置多种数据库
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • 产品三维模型在线预览
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 《天龙八部3D》Unity技术方案揭秘
  • ​【已解决】npm install​卡主不动的情况
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • $.ajax()
  • (1)STL算法之遍历容器
  • (arch)linux 转换文件编码格式
  • (多级缓存)缓存同步
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (三)模仿学习-Action数据的模仿
  • (算法二)滑动窗口
  • (五)Python 垃圾回收机制
  • (一)WLAN定义和基本架构转
  • (转)Windows2003安全设置/维护
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .net打印*三角形
  • .NET设计模式(11):组合模式(Composite Pattern)
  • .net专家(高海东的专栏)
  • .so文件(linux系统)
  • .ui文件相关
  • @JSONField或@JsonProperty注解使用
  • @NestedConfigurationProperty 注解用法