Junit系列一
一、基本概念
1.什么是软件测试
1) . 软件测试是通过考虑软件的所有属性(可靠性,可伸缩性,可移植性,可重用性,可用性)和评估软
件组件的执行来查找软件错误或缺陷来识别软件正确性的过程
2) . 软件测试提供了软件的独立视图和目标,并确保软件的适用性。它涉及在所需服务下测试所有组件,
以确认它是否满足指定的要求。该过程还向客户提供有关软件质量的信息。
3) . 测试是强制性的,因为如果软件由于缺乏测试而导致任何时间失败将是一种危险的情况。因此,没
有测试软件就无法部署到最终用户。
4) . 测试是一组用于在预定义脚本下确定应用程序正确性的技术,但是,测试无法找到应用程序的所有
缺陷。测试的主要目的是检测应用程序的故障,以便发现和纠正故障。它并未证明产品在所有条件下都能正常
运行,但仅表明它在某些特定条件下无法正常工作。
5) . 测试提供了比效软件的行为和状态与机制的比较,因为该机制可以识别问题。该机制可以包括相同
指定产品的过去版本,可比较产品,以及预期目的,相关标准或其他标准的界面,但不限于这些。
6) . 测试包括检查代码以及各种环境中的代码执行,条件以及代码的所有检查方面。在当前的软件开发
方案中,测试团队可能与开发团队分开,以便从测试中获得的信息可用于纠正软件开发过程
7) . 软件是否成功取决于对目标受众的接受,简单的图形用户界面,强大的功能负载测试等。
例如,银行业务的受众与视频游戏的受众完全不司。因此,当企业在开发软件产品时,它可以评估软
件产品是否对其购买者和其他受众有益。
小结:
软件测试 : 就是运用一系列的手段和措施(测试工具软件和测试代码)尽可能的找出bug,确保和提升
软件产品的质量,改善用户的体验度。
2.软件测试的流程/软件测试的生命周期
1) . 需求分析:在此阶段,测试人员分析软件开发的需求文档,以检查客户所述的要求
(先要掌握客户要做的是什么样的东西)
2) . 测试计划:测试人员确定整个项目的估计工作量和成本,此阶段在成功完或需求分析阶段后进行。
此阶段提供的测试策略和工作量估算文档。成功完成测试计划创建后,可以开始测试用例执行(测试人
员把整个项目的测试计划给制定好)
3) . 环境设置:环境设置需要一组必要的软件和硬件来创建测试环境。测试团队不参与设置测试环境,
而是创建测试环境的高级开发人员完成(配置硬件环境和软件环境)
4) . 测试用例:在此阶段,测试团队启动案例开发和执行活动。测试团队记下详细的测试用例,并在
需要时准备测试数据(至于怎么编写测试用例,这个可以根据具体的情况而定)
3.软件测试的分类
1) . 黑盒测试:黑盒测试是一种软件测试技术,它可以检查软件的功能,而不会窥视其内部结构或编码
2) . 白盒测试:需要写代码。关注的是程序的执行流程。
ps:从是否能看到内部代码的角度看的话,测试分为黑盒测试,白盒测试
3) . 手动测试:需要手动执行测试用例而不是使目自动化工具、测试人员根据最终用户的角度手动执行
所有测试用例。它确保应用程序是否正如需求文档中所述那样工作。计划和实施测试用例以完成几乎100%的
软件应用程序。测试用例报告也是手动生成的。
4) . 自动(化)测试:使用自动化测试工具执行测试用例套件时,称为自动化测试
ps:从实现的角度看,测试分为手动测试,自动测试
5) . 单元测试:单元测试涉及测试软件应用程序的每个单元或单个组件。这是第一级软件测试。单元测
试的目的是验证单 元组件的性能
6) . 集成测试是单元测试后软件测试过程的第二个层次。在此测试中,软件的单元或单个组件在组中进
行测试
ps:从模块的大小划分角度看:测试分为单元测试,集成测试
4.什么是Junit
Junit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck
的sUnit的xUnit家族中最为成功的一个。JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集
成了JUnit作为单元测试的工具。
ps:
JUnit是由Erich Gamma和Kent Beck编写的一个回归测试框架(regression testing framework)
Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何完成功能和完成什么样的功能。
Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。
5.Junit能做什么
要求在编写代码之前先写测试,这样可以强制你在写代码之前好好的思考代码(方法)的功能和逻辑,
否则编写的代码很不稳定,那么你需要同时维护测试代码和实际代码,这个工作量就会大大增加。因此在
极限编程中,基本过程是这样的:构思-> 编写测试代码-> 编写代码-> 测试,而且编写测试和编写代
码都是增量式的,写一点测一点,在编写以后的代码中如果发现问题可以较快的追踪到问题的原因,减小
回归错误的纠错难度。
ps: 所以使用Junit能让我们快速的完成单元测试
6.Junit的用法
6.1). Junit的主要版本
Junit3.x:以前的老版本是使用的Junit3.x,功能一般,且创建测试类的时候需要继承TestCase,
且每个方法的命名必须是test开头,例叮TestAdd()
Junit4.x:是当下使用较多的版本,且功能比较强大,且在创建测试类的时候不需要继承TestCase,
且每个方法的命名也不需要以test开头,且支持注解,但是要求的JDK版本为JDK1.6+
Junit5.x:是当前最新的版本,且功能更加强大,且由三大部分构成,且需要的JDK8+
6.2). Junit的使用
Junit3.x实现单元测试
Junit4.x实现单元测试
7.Junit3.x与Junit4.x的区别
1) . 在Junit3.x中对测试必须继承TestCase这个父类
2) . Junit3.x每一个方法名必须以test开头。例如:testMethod1()
3) . Junit3.x必须要重写TestCase的setUp()方法和tearDown()方法,分别执行初始化和
释放资源的操作
4) . Junit4.x中使用@Before和@After来标识,方法名可以随意定义如:testMethod1()...
5) . Junit4.x和普通Java类没有区别,只需要加上注解标注即可
二、断言
1.什么是断言
断言在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。一般来说,断言用于保证
程序最基本、最关键的正确性。断言检查通常在开发和测试时开启,为了保证程序的执行效率,在软件发布
后断言检查通常是关闭的
ps:断言就是契约式编程的一种体现。
ps:断言不应该以任何方式改变程序的状态。简单的说,如果希望在不满足某些条件时阻止代码的执行,
就可以考虑用断言来阻止它
2.Java中的断言
1). 就是所谓的assertion,是jdk1.4后加入的新功能
2).它主要使用在代码开发和测试时期,用于对某些关键数据的判断,如果这个关键数据不是你程序
所预期的数据,程序就提出警告或退出。
当软件正式发布后,可以取消断言部分的代码。Java中使用assert作为断言的关键字,这就可以看
出java对断言还是很重视的,因为如果不是很重要的话,直接开发一个类就可以了,没必要新定义
一个关键字
3.断言的语法
1). 语法一: assert expression;
expression代表一个布尔类型的表达式,如果为真,就继续正常运行,如果为假,程序退出
2). 语法二: assert expression1 : expression2;
expresion1是一个布尔表达式,expresion2是一个基本类型或者Object类型,如果expression1
为真,则程序忽略expression2继续运行;如果expression1为假,则运行expression2,然后退出程序
4.断言的使用
5.Junit中的断言
Junit为我们提供了一些辅助的函数,用来帮助我们来判断被测试的方法是否如我们预期的效果一样
正常执行。这些辅助函数被称之为断言。
6.Junit中常用的断言
方法 |
解释 |
assertArrayEquals(expecteds, actuals) |
查看两个数组是否相等。 |
assertEquals(expected, actual) |
查看两个对象是否相等。类似于字符串比较使用的equals()方法 |
assertNotEquals(first,second) |
查看两个对象是否不相等。 |
assertNull(object) |
查看对象是否为空。 |
assertNotNull(object) |
查看对象是否不为空。 |
assertSame(expected, actual) |
查看两个对象的引用是否相等。类似于使用“=="比较两个对象 |
assertNotSame(unexpeted, actual) |
查看两个对象的引用是否不相等。类似于使用"!="比较两个对象 |
assertTrue(condition) |
查看运行结果是否为true. |
assertFalse(condition) |
查看运行结果是否为false。 |
assertThat(actual,matcher) |
查看实际值是否满足指定的条件 |
fail() |
让测试失败 |
常用断言测试
7.断言与异常的区别
1). 异常被捕获后可以不做处理,程序从捕获位置继续执行,断言是无法忽略的,程序在断言失败处
立即终止因此断言通常用于调试版本,用来发现程序中的逻辑错误
2).如果发现了逻辑错误(异常),必须修改程序(例如Java中有特定的导常处理机制/手段)
3)使用断言的开销比异常小得多,而且断言可以从发布版中完全去除(项目发布的时候,断言是要移除的)
4)异常处理常用在代码编写中,断言常用于软件功能测试中
小结:
异常是指代码的逻辑功能,且是在开发的时候需要用到,断言是针对某一功能进行测试的
时候用到的
8.Junit中常用的注解
常用注解 |
解释 |
@Test |
将一个方法标记为测试方法; |
@Before |
每一个测试方法调用前必执行的方法; |
@After |
每一个测试方法调用后必执行的方法; |
@BeforeClass |
所有测试方法调用前执行一次,在测试类没有实例化之前就已被加载,需用static修饰; |
@AfterClass |
所有测试方法调用后执行一次,在测试类没有实例化之前就已被加载,需用static修饰; |
@lgnore |
暂不执行该方法; |
9.一个Junit4的单元测试用例执行顺序
@BeforeClass --> @Before --> @Test --> @After --> @AfterClass
10.每个测试方法的调用顺序
@Before --> @Test --> @After
ps: 当@Test执行之前或者执行之后不需要额外的执行代码的时候就可以省略掉@Before和@After
11.@Befor和@BeforeClass的区别
在执行顺序上:@BeforeClass是在@Before之前执行
在执行次数上:@BeforeClass执行一次,@Before可以执行多次
在书写修饰上:@BeforeClass需要static修饰,而@Before不需要static修饰,且还需要将
@BeforeClass和@Before修饰的方法都设定为public void类型的