Junit Test

Junit test学习笔记
视频链接:
Java教程 - Part-8-JUnit单元测试


文章目录

  • Junit Test
    • 单元测试
      • 什么是单元测试
      • 测试驱动开发(TDD)
      • 单元测试好处
    • JUnit介绍
      • 使用Main方法测试的缺点
      • JUnit特点
      • JUnit的设计
    • JUnit使用
      • 使用 Assert断言
      • 使用Before和After
        • 使用@Before和@After
        • 使用@BeforeClass和@AfterClass
        • Junit Fixture
      • 异常测试
      • 参数化测试
      • 超时测试

单元测试

什么是单元测试

  • 单元测试是针对最小功能单元编写测试代码
  • 由于JAVA最小功能单元是方法,因此单元测试是针对于单个JAVA方法的测试

测试驱动开发(TDD)

写代码前先写测试

单元测试好处

  • 确保单个方法运行正常

  • 若修改了方法代码,只需确保其对应的单元测试通过

  • 测试代码本身可以作为示例代码

  • 自动化运行所有测试,获得报告

JUnit介绍

针对JAVA语言的单元测试框架,开源(标准单元测试框架)

使用Main方法测试的缺点

  • 只有一个main方法,不能将测试代码分离

  • 没有打印出测试结果和期望结果

    因此需要一种测试框架来辅助测试

JUnit特点

  • 使用断言(Assertion)测试期望结果
  • 可以方便地组织,运行测试并查看结果
  • 常用IDE(Eclipse, IDEA)都集成了JUnit
  • 可以方便地集成到Maven

JUnit的设计

  • TestCase:一个TestCase表示一个测试
  • TestSuite:一个TestSuite包含一组TestCase,表示一组测试
  • TestFixture:一个TestFixture表示一个测试环境
  • TestResult:用于收集测试结果
  • TestRunner:用于运行测试
  • TestListener:用于监听测试过程,收集测试数据
  • Assert:用于断言测试结果是否准确

编写JUnit测试程序时,只需要关注 TestCaseAssert 即可

JUnit使用

使用 Assert断言

  • 需要导入Assert类:

    import static org.junit.Assert.*;
    
  • 常用方法:

    assertEquals(100,x)//断言相等
    assertNotEquals(100,x)//断言不相等
    assertArrayEquals({1,2,3},x)//断言数组相等
    assertEquals(3.1416,x,0.0001)//浮点数断言相等,其中0.0001为可接受的误差范围
    assertNull(x)//断言为null
    assertNotNull(x)//断言不为null
    assertTrue(x>0)//断言为true
    assertFalse(x>0)//断言为false
    
  • 测试要点:

    • 一个TestCase包含一组相关的测试方法
    • 使用Assert断言测试结果
    • 每个测试方法必须互相独立,测试代码必须简单
    • 不能为测试代码再编写测试
    • 测试须覆盖各类输入条件,特别是边界条件

使用Before和After

使用@Before和@After

  • 在同一个单元测试中包含多个测试方法,测试前后可能都需要额外的操作来初始化或释放对象

  • JUnit中使用@Before@After注解来完成上述工作

    public class XXXTest{//xxxxxx@Beforepublic void SetUp(){//初始化资源}@Afterpublic void TearDown{//释放资源}//xxxxxx
    }
    
  • Junit对于每个@Test测试方法:

    1. 实例化测试类
    2. 执行@Before方法
    3. 执行@Test方法
    4. 执行@After方法

    因此,使用@Before@After可以保证:

    • 单个@Test方法执行前会创建新的XxxTest实例,实例变量状态不会传入进下一个@Test方法
    • 每个@Test方法执行前后都会执行@Before方法和@After方法

使用@BeforeClass和@AfterClass

Junit提供了@BeforeClass@AfterClass静态方法:

  1. 在执行所有@Test方法前执行@BeforeClass静态方法
  2. 执行所有测试
  3. 在执行所有@Test方法后执行@AfterClass静态方法

注意要点:

  • @BeforeClass静态方法初始化的对象只能存放于静态字段中
  • 使用静态字段的对象测试,其状态会影响到所有的@Test方法

JUnit执行逻辑:

invokeBeforeClass(XXTest.class);//@BeforeClass
for (Method testMethod : findTestMethods(XXTest.class)){XXTest test = new XXTest();//newtest.SetUp();//@BeforetestMethod.invoke(test);//@Testtest.TearDown();//@After
}
invokeAfterClass(XXTest.class);//@AfterClass

Junit Fixture

初始化测试资源称作Fixture

  • @Before: 初始化测试对象,例如input = new FileInputStream();
  • @After: 销毁@Before创建的测试对象,例如input.close();
  • @BeforeClass: 初始化非常耗时的资源,例如创建数据库
  • @AfterClass: 清理@BeforeClass创建的资源,例如删除数据库

异常测试

对可能抛出的异常进行测试

  • 异常本身是方法签名的一部分

    public static int parseInt(String s) throws NumberFormatException
    
  • 测试错误的输入是否导致特定的异常

如何测试异常?

  1. 使用try-catch捕获异常,若没有捕获异常,则使用Junit提供的fail()来表示测试失败

  2. 在注解中,使用expected标注来测试异常

    @Test(expected = NumberFormatException.class)
    public void testNumberFormatException(){Integer.parseInt(null);
    }
    

参数化测试

如果待测试的输入和输出是一组数据:

  • 可以把测试数据组织起来
  • 用不同的测试数据调用相同的测试方法

参数化测试要求:

  • 参数必须由静态方法data()返回

  • 返回类型为Collection<Object[]>

  • 静态方法必须标记为@Parameters

  • 测试类必须标记为@RunWith(Parameterized.class)

  • 构造方法参数必须和测试参数相对应

@RunWith(Parameterized.class)
public class AbsTest{@Parameterspublic static Collection<?> data(){return Arrays.asList(new Object[][]{{0,0},{1,1},{-1,1}});}int input;int expected;//构造方法public AbsTest(int input,int expected){this.input = input;this.expected = expected;}@Testpublic void testAbs(){int r = Math.abs(this.input);assertEquals(this.expected,r);}
}

超时测试

可以为JUnit的单个测试设置超时

@Test(timeout = 1000)//单位是毫秒

注:超时测试并不能取代性能测试和压力测试

Junit单元测试总结相关推荐

  1. Controller、Service、Dao进行Junit单元

    原文链接:http://blog.csdn.net/u013041642/article/details/71430293 Spring对Controller.Service.Dao进行Junit单元 ...

  2. 【Android进阶】Junit单元測试环境搭建以及简单有用

    单元測试的目的 首先.Junit单元測试要实现的功能,就是用来測试写好的方法是否可以正确的运行,一般多用于对业务方法的測试. 单元測试的环境配置 1.在AndroidManifest清单文件的Appl ...

  3. JUnit单元测试用例

    2019独角兽企业重金招聘Python工程师标准>>> 注意在编写测试用例的时候,要保持测试用例的独立性 一个原则,每条单元测试用例都必须独立运行,不能依靠其他测试用例,或者不能按照 ...

  4. java单元测试总结

    java单元测试(使用junit) http://www.cnblogs.com/feiweiwei/archive/2009/06/16/1024623.html     JUnit是由 Erich ...

  5. 新手小白学JAVA JUnit单元测试方法

    JUnit单元测试 1.前言 之前我们去运行程序只能通过main(),也就是程序的主函数来运行,那么就会出现这样的问题:我们如果想要测试,就需要运行main()中所有的代码,这会导致,本来我们只是想测 ...

  6. 教你快速写出多线程Junit单元测试用例 - GroboUtils

    摘自: http://mushiqianmeng.blog.51cto.com/3970029/897786/ 本文出自One Coder博客,转载请务必注明出处: http://www.coderl ...

  7. 软件测试第二次作业:JUNIT单元测试方法

    单元测试:最小粒度的测试,以测试某个功能或代码块.一般由程序员来做,因为它需要知道内部程字设计和编码的细节. JUnit :是一个开发源代码的Java测试框架,用于编写和运行可重复的测试.他是用于单元 ...

  8. IDEA 导入Junit.jar 包 ,使用 Junit 单元测试过程

    一.IDEA中,导入 Junit.jar 包 1.File-->Project Structure-->Modules-->右侧Dependencies-->+号-->J ...

  9. 单元测试总结反思_语文单元考试反思

    语文单元考试反思 导语:在语文单元考试之后,我们首先要做好的就是写好考试反思,以下是小编为大家整理的语文单元考试反思,欢迎大家阅读与借鉴! 语文单元考试反思(1) 这次的语文考试中最大的问题和以前一样 ...

最新文章

  1. Mysq表的创建和l数据类型
  2. IDEA配置SVN并实现代码版本控制
  3. java中String的比较符
  4. vscode配置live-server转发代理
  5. 利用Python Matplotlib库做简单的视觉化(2)
  6. 查看现有运行的linux服务器有多少内存条
  7. 数组及对象几种遍历方式对比
  8. intouch的报警怎么发到微信上
  9. pyhive 安装测试及问题解决
  10. 有关session安全的那些事儿
  11. Indented Inventory BOM如何转为最终的单层采购BOM
  12. 游戏思考11:游戏服务器类型简单分类(有服务器的会讲的详细一点)
  13. 基于libVLC的视频播放器之五:抽帧
  14. 基因组注释2. 非编码基因和编码基因预测tRNAScan-SE、rRNAmmer和Prodigal
  15. Bluecoat代理设备维护手册
  16. 基于python爬虫下载网站在线视频
  17. 前端框架系列之(mvp)
  18. 利用Exchange服务同步iOS和android中的联系人
  19. Mysql 安装PMM监控 (一台主机安装)
  20. 2021年全球支付现状及发展趋势分析:亚太电子商务数字支付将超过3.1万亿美元[图]

热门文章

  1. Java输入输出处理
  2. java实现发红包案例(一)
  3. 测试用例的力度和评审、测试用例的本质
  4. 关于队里面最菜的在博客打卡第五十天天这件事
  5. kvm学习------虚拟机迁移
  6. Word编号经常感觉用不习惯?看看这4个编号技巧吧,省事又好用
  7. 【软件工程】 第0次个人作业
  8. 中小企业如何实施股权激励
  9. 【iOS开发】导航栏,类似淘宝“我的淘宝”导航栏
  10. C语言九九乘法口诀表