Junit的基本使用
来源:互联网 发布:收集5条红酒网络广告语 编辑:程序博客网 时间:2024/05/29 17:58
Junit 使用详解
1.Junit是什么?
JUnit是一个java语言的开源单元测试框架。用于编写和运行可重复的测试。
Junit测试是一种白盒测试。它能知道被测试软件如何完成功能能和完成什么样的功能。
- 提供的功能:
- 断言测试预期结果。
- 测试功能共享通用的测试数据。
- 测试套件轻松地组织和运行测试。
- 图形和文本测试运行。
- 作用范围:
- 整个对象
- 对象的一部分,如方法
- 对象间的交互
那么如何通过Junit来进行测试的呢?因为他其实本身就是一个框架,所以得将它导入。不过现在的常用IDE本身都自带了Junit。通过断言和注解的方式实现测试的。
如何建立测试类?
在eclipse中File -> new -> Junit Test Case ,就可以为某一个类建立测试类了
2.Junit注解
在Junit4的基本注释中,基本的注释就有六种
我们通过一个例子了解下。
import static org.junit.Assert.*;import java.util.*;import org.junit.*;public class AnnotationTest { @BeforeClass public static void executedBeforeClass() { System.out.println("@BeforeClass"); } @Before public void executedBefore() { System.out.println("@Before"); } @AfterClass public static void executedAfterClass() { System.out.println("@AfterClass"); } @After public void executedAfter() { System.out.println("@After"); } //测试是否超时,这里表示不超过100ms则通过测试 @Test(timeout = 100) public void executedTestOne() { System.out.println("@Test1"); } //测试是否抛出异常,抛出该指定异常则通过测试 @Test(expected = ArithmeticException.class) public void executedTestTwo() { System.out.println("@Test2"); int i = 1/0; System.out.println("@Test3"); } @Ignore public void executionIgnored() { System.out.println("@Ignore"); }}
最后面的输出结果为
@BeforeClass@Before@Test1@After@Before@Test2@After@AfterClass
通过上面的测试用例,我们可以得出以下结论
1. BeforeClass和AfterClass注解的方法必须为静态方法。而且这两个静态方法只执行一次
2. 注解方法执行的顺寻为BeforeClass>Before>Test>After>AfterClass。
3. 在每次执行Test之前都会执行Before,之后都会执行After。
4. 至于多个Test的执行顺寻是不固定,目前Test的执行是根据反射API的返回的顺寻执行,若要指定。需要使用@FixMethodOrder的方法。这里不在介绍,有兴趣的小伙伴可以自己找找。
5. Test1设置了一个参数timeout = 100,代表这运行时间不超过100ms,则通过测试
6. Test2设置了一个参数expected = ArithmeticException.class,代表着如果出现该异常,则通过测试。显然1/0会出现该运算异常,所以会通过测试。如果不发生该异常,则表明不通过测试,如改为1/1,是无法通过测试的。
7. 如果发生捕抓到了目标异常,则直接跳出方法,就像test3不输出一样
2.Junit断言
我想断言很多人都听说过。下面是一些Junit常用的断言方法
下面我就举一个简单的测试例子
@Test public void test() { String obj1 = "junit"; String obj2 = "junit"; String obj3 = "test"; String obj4 = "test"; String obj5 = null; assertEquals(obj1, obj2); assertSame(obj3, obj4); assertNotSame(obj2, obj4); assertNotNull(obj1); assertNull(obj5); }
可以发现上面的断言方法是可以工作的。
(在eclipse中Junit窗口中表示为绿色,表明可以进行工作,而红色则表示有问题)
3.套件测试
在讲述如何进行套件测试之前,我们必须先明白几个概念
- 测试方法:用@Test注解的方法
- 测试类:XXTest.java。这个类包含着这@Test注解的方法
- 测试集:简单理解为测试类的集合。默认测试集为Suite.class
- 测试运行器:决定使用哪一种测试方法/类/集。一般默认的测试运行器为Junit4.class
从上面概念可以知道从上往下,范围越来越大。
这里新增加了两个注释,@RunWith以及@SuiteClasses
使用方法如下
import org.junit.runner.RunWith;import org.junit.runners.Suite;@RunWith(Suite.class)@Suite.SuiteClasses({ TestOne.class, TestTwo.class })public class SuitTest {}
上面代码中,TestOne和TestTwo为两个测试类,里面都包含了自己的测试方法。
我们可以发现,SuiteClasses方法是将两个测试类加入测试集。
而RunWith是以Suite.class这个测试集为运行器来运行。
这样子感觉套件测试好像没有什么用的样子,它其实就是将一系列的测试用例结合在一起,然后按照测试计划所定义的阶段来进行测试。
5.参数测试
我们需要测试的方法当然不可能都是无参数的。更多的时候是带参数的。那我们还是自己手动输入参数,显然不可能,这样效率低而且容易出错。同样的,Junit也给我们带来了带参数的测试方法。
不过要对一个测试类进行参数化测试。那么该测试类需要满足下面几个条件
1. 该类被注解为@RunWith(Parameterized.class)
(Parameterized 是一个进行参数化测试的测试类指定的特殊运行器)
2. 该类有一个带参数构造函数,用来存储数据
3. 需要用@Parameters注解的一个静态方法生成并返回测试数据
4. 有测试方法
下面我们通过一个例子来说明如何进行参数测试
import static org.junit.Assert.assertEquals;import java.util.Arrays;import java.util.Collection;import org.junit.Test;import org.junit.runner.RunWith;import org.junit.runners.Parameterized;import org.junit.runners.Parameterized.Parameters;//RunWith(Parameterized.class)注解@RunWith(Parameterized.class)public class CalculateTest { private int expected; private int first; private int second; //构造方法 public CalculateTest(int expectedResult, int firstNumber, int secondNumber) { this.expected = expectedResult; this.first = firstNumber; this.second = secondNumber; } //生成数据的方法 @Parameters public static Collection addedNumbers() { return Arrays.asList(new Integer[][] { { 3, 1, 2 }, { 5, 2, 3 }, { 7, 3, 4 }, { 9, 4, 5 }, }); } //测试方法 @Test public void sum() { //Calculate里面有一个相加的方法 Calculate add = new Calculate(); System.out.println("Addition with parameters : " + first + " and " + second); assertEquals(expected, add.sum(first, second)); }}
这里定义了一个Calculate对象,里面有一个相加的方法。改测试类就是用来测试Calculate类的
从上面代码可以看出,他满足进行参数化的所有条件。下面我们看看控制台的输出结果、
Addition with parameters : 1 and 2Adding values: 1 + 2Addition with parameters : 2 and 3Adding values: 2 + 3Addition with parameters : 3 and 4Adding values: 3 + 4Addition with parameters : 4 and 5Adding values: 4 + 5
其中addNumbers方法提供了测试所用的数据。然后送到测试方法里面。这样子我们就在测试的时候,不用,每次都手动输入参数。如果要修改输入的参数,只需要在这个方法里面修改就好了。
以上就是Junit的一些基本使用~当然Junit还有很多东西,有兴趣的小伙伴可以进一步了解
- junit的基本使用
- Junit的基本使用
- Junit单元测试框架的基本使用
- JUnit基本使用
- Junit 基本使用
- Junit基本使用
- JUnit学习之JUnit的基本介绍
- junit学习之junit的基本介绍
- junit学习之junit的基本介绍
- junit学习之junit的基本介绍
- junit学习之junit的基本介绍
- 在spring下使用junit做单元测试的基本方法
- JUnit 4的基本用法
- Junit框架使用(1)--基本使用
- Junit框架使用(1)--基本使用
- junit的使用
- Junit的简单使用
- JUnit的使用总结
- Word2Vec笔记
- 深度学习方法:卷积神经网络CNN经典模型整理Lenet,Alexnet,Googlenet,VGG,Deep Residual Learning
- QT关于程序运行日志
- HDU
- 获得当前周别所属年份
- Junit的基本使用
- HDU 4507 吉哥系列故事――恨7不成妻 数位DP
- 搭建fabric1.0的开发环境+e2e_cli例子的运行
- Java可变参数varargus的使用
- NG 逻辑回归_二分类
- JQ制作一个目录树菜单
- 用仿射变换实现图片旋转,很好用!
- JVM、Java编译器和Java解释器
- addHeaderView