软件测试技术实战 设计、工具及管理》联载-31

简介: 软件测试技术实战 设计、工具及管理》联载-31

8章   单元测试工具


单元测试(Unit Testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。


在一种传统的结构化编程语言中,比如C语言,要进行测试的单元一般是函数或子过程。在像C++这样的面向对象的语言中,要进行测试的基本单元是类。对Ada语言来说,开发人员可以选择是在独立的过程或函数,还是Ada包的级别上进行单元测试。单元测试的原则同样被扩展到第四代语言4GL)的开发中,在这里基本单元被典型地划分为一个菜单或显示界面。


本章介绍单元测试工具JUnit 4JUnit 4JUnit的第四个版本,而JUnit属于Xunit系列的单元测试工具的产品(另外,还有CPPUnitCUnitC#Unit等)。


本章主要内容为:

l 单元测试工具JUnit 4如何在Eclipse中使用


8.1  单元测试工具JUnit 4如何在Eclipse中使用

百度百科介绍:

JUnit是一个Java语言的单元测试框架,由Kent BeckErich Gamma建立,逐渐成为源于Kent BecksUnitxUnit家族中最成功的一个。JUnit有自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试工具。


JUnit是由Erich GammaKent Beck编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用JUnit进行自动测试了。”


JUnit 4JUnit框架有史以来的最大改进,其主要目标是利用Java 5Annotation特性简化测试用例的编写。


8.1.1  JUnit 4环境的配置

   注:使用JUnit 4时不要使用第11章提供的ADT配置的Eclipse,这个EclipseJUnit 4中存在一些问题。可以到Eclipse的官方网站(http://www.eclipse.org/上下载J2SE版本。笔者目前使用的版本如图8-1所示


image.png

8-1  Eclipse


首先需要有被测程序,这里以一个简易的计算器作为例子。


案例8-1:简易的计算器。

这个计算器中主要包括加、减、乘、除、求平方以及开根号6个函数,其代码如下:


package com.jerrg;
public class Calculator {
   private static int result; // 静态变量,用于存储运行结果
   public void add(int m,int n) {
        result = m + n;
   }
   public void substract(int m,int n) {
        result = n-m;  //Bug: 正确的应该是result =m-n
   }
   public void multiply(int m,int n) {
   }         // 此方法尚未写好
   public void divide(int m,int n) {
        result = m / n;
   }
   public void square(int n) {
            result = n * n;
   }
   public void squareRoot(int n) {
         for (; ;) ;            //Bug : 死循环
   }
   public void clear() {     // 将结果清零
        result = 0;
   }
   public int getResult() {
        return result;
   }
}

注:这里暂时先不写乘法函数的实现,并且故意写错减法函数的实现。

 

接下来建立JUnit 4测试程序。首先将JUnit 4单元测试包引入这个Project:在被测程序的Class上单击鼠标右键,在弹出的菜单上选择【Properties】,然后在弹出的属性窗口中,首先在左边选择【Java Build Path】,然后到右上选择【Libraries】标签,之后在最右边选择【Add Library…】按钮,如图8-2所示。

image.png

8-2 Java Build Patch


EclipsePackage Explorer中右键单击该弹出菜单,选择New a JUnit 4 Test Case”,在弹出的对话框中进行相应的选择,如图8-3所示。

image.png

8-3  New JUnit Test Case


单击【下一步】按钮后,系统自动列出这个类中包含的方法,选择要进行测试的方法。此例中,仅对“加、减、乘、除”4个方法进行测试。之后系统会自动生成一个新类CalculatorTest,里面包含一些空的测试用例。只需对这些测试用例稍作修改,即可使用。


packagecom.jerry;
importstatic org.junit.Assert.*;
importorg.junit.Before;
importorg.junit.Test;
importorg.junit.Ignore;
publicclass CalculatorTest {
privatestatic Calculator calculator = new Calculator();
@Before
publicvoid setUp() throws Exception {
        calculator.clear();
}
@Test
publicvoid testAdd() {
        calculator.add(2,3);
        assertEquals(5,calculator.getResult());
}
@Test
publicvoid testSubstract() {
        calculator.substract(10,2);
        assertEquals(8,calculator.getResult());
}
@Test
publicvoid testMultiply() {
     fail("Not yetimplemented");
}
@Test
publicvoid testDivide() {
        calculator.divide(8,2);
        assertEquals(4,calculator.getResult());
}
}


注:这里暂时先不写乘法函数的测试代码。


8.1.2  Junt4测试用例的运行和调试

写好产品代码和测试代码后,就可以运行测试程序了。只要在EclipseCalculatorTest类上单击鼠标右键,在弹出的菜单上选择“Run As a JUnit Test”运行测试用例,测试结果就显示出来了,如图8-4所示。


显然,减法没通过是由于代码中存在问题,而乘法没通过是由于乘法没有实现。首先来修改减法的函数实现:

publicvoid substract(int m,int n) {
        result =n-m;  //Bug: 正确的应该是result =m-n
}

再进行一次运行,结果如图8-5所示。

image.png

8-4  JUnit单元测试结果(一)  


image.png

8-5 JUnit单元测试结果(二)


最后完成乘法的产品代码与测试代码。产品代码如下:

publicvoid multiply int m,int n) {
    result=m*n
    }


测试代码如下:

publicvoid testMultiply() {
        calculator.multiply(8,2);
        assertEquals(16,calculator.getResult());
}


8-6为最后的测试结果。最终产品代码如下:

packageandycpp;
publicclass Calculator {
    private static int result; // 静态变量,用于存储运行结果
    public void add(int m,int n) {
        result = m + n;
    }
    public void substract(int m,int n) {
        result = m-n;     
    }
    public void multiply int m,int n) {
        result = m*n;
    }
    public void divide(int m,int n) {
        result = m / n;
    }
    public void square(int n) {
        result = n * n;
    }
    public void squareRoot(int n) {
        for (; ;) ;            //Bug : 死循环,为了后面介绍
    }
    public void clear() {     // 将结果清零
        result = 0;
    }
    public int getResult() {
        return result;
    }
}

image.png

8-6  JUnit单元测试结果(三)

而最终的测试代码如下:

packagecom.jerry;
importstatic org.junit.Assert.*;
importorg.junit.Before;
importorg.junit.Test;
importorg.junit.Ignore;
publicclass CalculatorTest {
privatestatic Calculator calculator = new Calculator();
@Before
publicvoid setUp() throws Exception {
calculator.clear();
}
@Test
publicvoid testAdd() {
        calculator.add(2,3);
        assertEquals(5,calculator.getResult());
}
@Test
publicvoid testSubstract() {
        calculator.substract(10,2);
        assertEquals(8,calculator.getResult());
}
@Test
publicvoid testMultiply() {
        calculator.multiply (8,2);
        assertEquals(16,calculator.getResult());
}@Test
publicvoid testDivide() {
        calculator.divide(8,2);
        assertEquals(4,calculator.getResult());
}
}


顾翔凡言:

不是好的工作会给你带来好的心情,而是好的心情会给你带来好的工作。

目录
相关文章
|
8天前
|
前端开发 JavaScript 测试技术
前端测试技术中,如何提高集成测试的效率?
前端测试技术中,如何提高集成测试的效率?
|
8天前
|
安全 前端开发 测试技术
如何选择合适的自动化安全测试工具
选择合适的自动化安全测试工具需考虑多个因素,包括项目需求、测试目标、系统类型和技术栈,工具的功能特性、市场评价、成本和许可,以及集成性、误报率、社区支持、易用性和安全性。综合评估这些因素,可确保所选工具满足项目需求和团队能力。
|
7天前
|
监控 网络协议 Java
一些适合性能测试脚本编写和维护的工具
一些适合性能测试脚本编写和维护的工具
|
7天前
|
安全 网络协议 关系型数据库
最好用的17个渗透测试工具
渗透测试是安全人员为防止恶意黑客利用系统漏洞而进行的操作。本文介绍了17款业内常用的渗透测试工具,涵盖网络发现、无线评估、Web应用测试、SQL注入等多个领域,包括Nmap、Aircrack-ng、Burp Suite、OWASP ZAP等,既有免费开源工具,也有付费专业软件,适用于不同需求的安全专家。
11 2
|
8天前
|
数据采集 前端开发 安全
前端测试技术
前端测试是确保前端应用程序质量和性能的重要环节,涵盖了多种技术和方法
|
9天前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
39 3
|
15天前
|
前端开发 JavaScript 测试技术
前端小白逆袭之路:如何快速掌握前端测试技术,确保代码质量无忧!
【10月更文挑战第30天】前端开发技术迭代迅速,新手如何快速掌握前端测试以确保代码质量?本文将介绍前端测试的基础知识,包括单元测试、集成测试和端到端测试,以及常用的测试工具如Jest、Mocha、Cypress等。通过实践和学习,你也能成为前端测试高手。
34 4
|
14天前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
31 1
|
18天前
|
前端开发 数据管理 测试技术
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第27天】本文介绍了前端自动化测试中Jest和Cypress的实战应用与最佳实践。Jest适合React应用的单元测试和快照测试,Cypress则擅长端到端测试,模拟用户交互。通过结合使用这两种工具,可以有效提升代码质量和开发效率。最佳实践包括单元测试与集成测试结合、快照测试、并行执行、代码覆盖率分析、测试环境管理和测试数据管理。
35 2
|
18天前
|
Web App开发 定位技术 iOS开发
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
19 1