IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> Junit 单元测试要义总结 -> 正文阅读

[开发测试]Junit 单元测试要义总结

一、单元测试

单元测试是针对最小的功能单元编写的测试代码,对于Java来说最小的功能单元是方法,因此单元测试对于Java 来说就是针对单个Java方法的测试。

单元测试测试的基本思路是TDD(Test-Driven Development)测试驱动开发,通过测试驱动开发,提升开发质量。

单元测试的好处:
1、确保单个方法运行正常;
2、修改方法的代码后,单元测试可以快速自测;
3、可以自动化运行所有单元测试并获得报告;
4、单元测试代码可以直接用来演示方法的调用和执行;

二、Junit

Junit 当前版本:3.x / 4.x / 5.x

待测试的类及方法

public class Calculator{
    public int calculate(String expression){
        String[] ss = expression.split("\\+");
        System.out.println(expression + " -> " + Arrays.toString(ss))
        int sum = 0;
        for(String s : ss){
            sum = sum + Integer.parseInt(s);
        }
        return sum;
    }
}

测试类及方法

public class CalculatorTest{
    @Test
    public void testCalculate(){
        /*当未实现单元测试内容时,需要写fail 这样运行到这里的时候会执行失败,可以通过这种方式提示用户实现该单元测试内容
        fail("Not yet implemented"); */
    }
    @Test
    public void testCalculate(){
        /*测试列举执行场景*/
        assertEquals(3,new Calculator.calculate("1+2"));
        assertEquals(6,new Calculator.calculate("1+2+3"));
        assertEquals(35,new Calculator.calculate("12+23"));
    }
    @Test
    public void testCalculate(){
        /*测试执行异常输入场景,帮助方法编写考虑异常场景,实现测试驱动开发*/
        assertEquals(3,new Calculator.calculate("1 +2"));
    }
}

常用断言

断言判断assert
断言相等assertEquals(100,x)
断言数组相等assertArrayEquals({100,200,300},x)
浮点数相等assertEquals(3.14159,x,0.0001)
断言为 nullassertNull(x)
断言为true/falseassertTrue(x>0) assertFalse(x>0)
其他assertNotNull / assertNotEquals

注意:
1、Junit 使用Assert 断言测试结果(浮点数assertEquals要制定delta);
2、每个测试方法必须完全独立;
3、测试代码必须非常简单;
4、不能为测试代码再编写测试;
5、方法输入场景考虑需要全面,才能起到单测效果;

三、常用注解

注解解释执行逻辑常用场景
@Before初始化测试资源在每一个测试方法执行前执行初始化测试对象,例如 input = new FileInputStream();
@After释放测试资源在每一个测试方法执行后执行销毁@Before创建的测试对象,例如 input.close();
@BeforeClass初始化静态资源在所有测试方法执行前执行初始化非常耗时的资源,例如,创建数据库
@AfterClass释放静态资源在所有测试方法执行后执行清理@BeforeClass创建的资源,例如:删除数据库

以上注解Junit 执行逻辑

invokeBeforeClass(CalculatorTest.class); //@BeforeClass
for(Method testMethod : findTestMethods(CalculatorTest.class)){
    CalculatorTest test = new CalculatorTest(); //new 
    test.setUp(); //@Before
    testMethod.invoke(test);//@Test
    test.tearDown();@After
}
invokeAfterClass(CalculatorTest.class);//@AfterClass

四、异常测试

/*测试代码执行若抛出 NumberFormatException 则测试通过;若抛出其他异常或者没有抛出异常,则测试不通过*/
@Test(expected = NumberFormatException.class)
public void testNumberFormatException(){
    Integer.parseInt(null);
}

五、参数化测试

若待测试的输入和输出是一组数据
1、可以把测试数据组织起来;
2、用不同的测试数据调用相同的测试方法;

@RunWith(Parameterized.class)
public class AbsTest{
    @Parameters
    public 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;
    }

    @Test
    public void testAbs(){
        int r = Math.abs(this.input);
        assertEquals(this.expected, r);
    }
}

参数必须由静态方法data() 返回,返回类型为Collection<Object[]>静态方法必须标记为@Parameters 测试类必须标记为@RunWith(Parameterized.class) ,构造方法参数必须和测试参数对应。

六、超时测试

public class PItest{
    PI pi = new PI();
    /*timeout时间单位为毫秒,如下含义为不超过1000ms的情况的下,测试通过*/
    @Test(timeout=1000)
    public void testTimeout(){
        /*计算pi到展开项的第1000个*/
        double r = pi.calculate(1000);
        assertEquals(3.14, r , 0.01);
    }
}
  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-03-04 15:54:49  更:2022-03-04 15:54:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 2:46:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码