Junit 学习笔记

1. 编写测试用例时需要注意

  1. 测试方法上必须使用 @Test 进行修饰
  2. 测试方法必须使用 public void 进行修饰,不能带任何参数
  3. 新建一个车源代码目录来存放我们的测试代码
  4. 测试类的包应该和被测试类保持一致
  5. 测试单元中的每个方法必须可以独立测试,测试方向间不能有任何依赖
  6. 测试类使用 Test 作为类名的后缀(不是必须)
  7. 测试方法使用 Test 作为方法名的前缀(不是必须)

2. 出现结果分析

  1. Failure 一般由单元测试使用的断言方法判断失败所引起,这表示测试点发现了问题,就是说程序输出的结果和我们预期的不一样。
  2. error 是由代码异常引起的,它可以产生于测试代码本身的错误,也可以是被测试代码中的一个隐藏 bug
  3. 测试用例不是用来证明你是对的,而是用来证明你没有错(即测试用例用来达到想要的预期结果,但对于逻辑错误无能为力)。

3. Junit 运行流程

举个例子:

public class JunitFlowTest {

    @BeforeClass
public static void setUpBeforeClass() throws Exception {
System.out.println("this is beforeClass...");
} @AfterClass
public static void tearDownAfterClass() throws Exception {
System.out.println("this is afterClass...");
} @Before
public void setUp() throws Exception {
System.out.println("this is before...");
} @After
public void tearDown() throws Exception {
System.out.println("this is after");
} @Test
public void test1() {
System.out.println("this is test1...");
} }

输出结果如下:

---- IntelliJ IDEA coverage runner ----
sampling ...
include patterns:
com\.test\.util\..*
exclude patterns:this is beforeClass...
this is before...
this is test1...
this is after
this is afterClass... Process finished with exit code 0

解释如下:

  1. @BeforeClass 修饰的方法会在所有方法被调用前被执行,而且该方法是静态的,所以当测试类被加载后接着就会运行它,而且在内存中它只回存在一份实例,它比较适合加载配置文件
  2. @AfterClass 所修饰的方法通常用来对资源的清理,如关闭数据库的连接
  3. @Before@After 会在每个测试方法的前后各执行一次

4. Junit 常用注解

  1. @Test:将一个普通的方法修饰成为一个测试方法

    • @Test(expected=XX.class):用来捕获异常
    • @Test(timeout=毫秒):到时间后停止测试(用来测试一些循环很久的语句)
  2. @BeforeClass:它会在所有的方法运行前被执行,static 修饰
  3. @AfterClass:它会在所有的方法运行结束后被执行,static 修饰
  4. @Before:会在每一个测试方法被运行前执行一次
  5. @After:会在每一个测试方法运行后被执行一次
  6. @Ignore:所修饰的测试方法会被测试运行器忽略
  7. @RunWith:可以更改测试运行器 org.junit.runner.Runner

举个例子:

public class AnnotationTest {

    @Test(expected = ArithmeticException.class)
public void testDivide() {
assertEquals(3, new Calculate().divide(6, 0));
} @Test(timeout = 2000)
@Ignore
public void testWhile() {
while (true) {
System.out.println("run forever...");
}
} @Test(timeout = 3000)
public void testReadFile() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
} }

5. Junit 测试套件的使用

测试套件就是组织测试类一起运行的。

步骤:
  1. 写一个作为测试套件的入口类,这个类里不包含其他的方法
  2. 更改测试运行器 Suite.class
  3. 将要测试的类作为数组传入到 Suite.SuiteClasses({})
例子:
@RunWith(Suite.class)
@Suite.SuiteClasses({TaskTest1.class, TaskTest2.class, TaskTest3.class})
public class SuiteClasses {
}

6. Junit 参数化设置

步骤
  1. 更多默认的测试运行器为 RunWith(Parameterized.class)
  2. 声明变量来存放预期值和结果值
  3. 声明一个返回值为 Collection 的公共静态方法,并使用 @Parameters 进行修饰
  4. 为测试类声明一个带有参数的公共构造函数,并在其中为之声明变量赋值
例子

ParameterTest.java:

@RunWith(Parameterized.class)
public class ParameterTest { int expected = 0;
int input1 = 0;
int input2 = 0; @Parameterized.Parameters
public static Collection<Object[]> t() {
return Arrays.asList(new Object[][] {
{3, 1, 2},
{4, 2, 2}
});
} public ParameterTest(int expected, int input1, int input2) {
this.expected = expected;
this.input1 = input1;
this.input2 = input2;
} @Test
public void add() {
assertEquals(expected, new Calculate().add(input1, input2));
}
}

Junit 学习笔记的更多相关文章

  1. junit学习笔记

    junit编程规范 测试方法上必须使用@Test进行修饰 测试方法必须使用public void 进行修饰,不能带任何的参数 新建一个源代码目录 测试类的包应该和被测试类保持一致 测试单元中的每个方法 ...

  2. junit学习笔记(二):hamcrest和TestSuit

    1. hamcrest hamcrest可以有效增加junit的测试能力,用一些对通俗语言来进行测试. Hamcrest 是一个测试的框架,它提供了一套通用的匹配符 Matcher,灵活使用这些匹配符 ...

  3. JUnit学习笔记-0-JUnit启动类

    [说明]:本文基于JUnit4.13版本代码,JDK1.8.0_151环境,使用工具为Eclipse,版本为Oxygen.1a Release (4.7.1a) [图示]: [正文]:JUnit4.1 ...

  4. Junit学习笔记之五:MockMVC

    原文:https://blog.csdn.net/xiao_xuwen/article/details/52890730 随着RESTful Web Service的流行,测试对外的Service是否 ...

  5. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  6. 积极主动敲代码,使用Junit学习Java程序设计

    积极主动敲代码,使用JUnit学习Java 早起看到周筠老师在知乎的回答软件专业成绩很好但是实际能力很差怎么办?,很有感触. 从读大学算起,我敲过不下100本程序设计图书的代码,我的学习经验带来我的程 ...

  7. [原创]java WEB学习笔记109:Spring学习---spring中事物管理

    博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好 ...

  8. [原创]java WEB学习笔记109:Spring学习---spring对JDBC的支持:使用 JdbcTemplate 查询数据库,简化 JDBC 模板查询,在 JDBC 模板中使用具名参数两种实现

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  9. Android自动化学习笔记:编写MonkeyRunner脚本的几种方式

    ---------------------------------------------------------------------------------------------------- ...

随机推荐

  1. Python实现协程

    什么是进程和线程 有一定基础的小伙伴们肯定都知道进程和线程. 进程是什么呢? 直白地讲,进程就是应用程序的启动实例.比如我们运行一个游戏,打开一个软件,就是开启了一个进程. 进程拥有代码和打开的文件资 ...

  2. arcgis python 新生成的数据设置

    try: # Update the spatial index(es) # r = arcpy.CalculateDefaultGridIndex_management(outFeatures) ar ...

  3. 解决com.android.support版本冲突问题

    原文:https://www.jianshu.com/p/0fe985a7e17e 项目中不同Module的support包版本冲突怎么办? 只需要将以下代码复制到每个模块的build.gradle( ...

  4. 为什么vue-cli创建的build文件下没有dev-server.js文件

    在新版本的Vue开发中,通过vue-cli创建的build文件夹下面已经没有了旧版本中的dev-server.js文件新版本的vue已将dev-server.js与webpack.dev.conf.j ...

  5. 011-多线程-JUC集合-Queue-PriorityBlockingQueue和DelayQueue

    一.PriorityBlockingQueue简介 PriorityBlockingQueue是一个支持优先级的无界阻塞队列.默认情况下元素采用自然顺序升序排列.也可以自定义类实现compareTo( ...

  6. 阶段5 3.微服务项目【学成在线】_day16 Spring Security Oauth2_11-SpringSecurityOauth2研究-JWT研究-JWT介绍

    3.6 JWT研究 3.6.1 JWT介绍 在介绍JWT之前先看一下传统校验令牌的方法,如下图: 问题: 传统授权方法的问题是用户每次请求资源服务,资源服务都需要携带令牌访问认证服务去校验令牌的合法性 ...

  7. CerntOS7下搭建git服务器

    (1).安装git yum安装git,需要ssh的支持.某些版本需要安装git-core,那才是服务器. [root@youxi1 ~]# yum -y install git 创建git用户 [ro ...

  8. python学习:python的常用功能示例2

    1. python 写入txt with open("douban.txt","w") as f: f.write("这是个测试!") fi ...

  9. 怎么用Ubuntu系统制作Ubuntu系统盘

    ubuntu 16 下载地址: http://releases.ubuntu.com/16.04/?_ga=2.211639766.273896083.1564759714-49163328.1564 ...

  10. react 生命周期函数的一些心得体会

    一.理论 组件本质上是状态机,输入确定,输出一定确定 生命周期的三个阶段,三者时间是不固定的,只是在逻辑上的分类: 二.初始化阶段: getDefaultProps:获取实例的默认属性(即使没有生成实 ...