软件测试技术实战 设计、工具及管理》联载-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());
}
}


顾翔凡言:

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

目录
相关文章
|
1月前
|
数据采集 监控 机器人
浅谈网页端IM技术及相关测试方法实践(包括WebSocket性能测试)
最开始转转的客服系统体系如IM、工单以及机器人等都是使用第三方的产品。但第三方产品对于转转的业务,以及客服的效率等都产生了诸多限制,所以我们决定自研替换第三方系统。下面主要分享一下网页端IM技术及相关测试方法,我们先从了解IM系统和WebSocket开始。
60 4
|
2月前
|
测试技术 持续交付 UED
软件测试的艺术:确保质量的实战策略
在软件开发的舞台上,测试是那把确保每个功能如交响乐般和谐奏响的指挥棒。本文将深入探讨软件测试的重要性、基本类型以及如何设计高效的测试策略。我们将通过一个实际的代码示例,展示如何运用这些策略来提升软件质量和用户体验。
|
1月前
|
Java 测试技术 数据安全/隐私保护
软件测试中的自动化策略与工具应用
在软件开发的快速迭代中,自动化测试以其高效、稳定的特点成为了质量保证的重要手段。本文将深入探讨自动化测试的核心概念、常见工具的应用,以及如何设计有效的自动化测试策略,旨在为读者提供一套完整的自动化测试解决方案,帮助团队提升测试效率和软件质量。
|
2月前
|
前端开发 JavaScript 测试技术
前端测试技术中,如何提高集成测试的效率?
前端测试技术中,如何提高集成测试的效率?
|
1月前
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
224 17
Selenium:强大的 Web 自动化测试工具
|
2月前
|
机器学习/深度学习 人工智能 算法
BALROG:基准测试工具,用于评估 LLMs 和 VLMs 在复杂动态环境中的推理能力
BALROG 是一款用于评估大型语言模型(LLMs)和视觉语言模型(VLMs)在复杂动态环境中推理能力的基准测试工具。它通过一系列挑战性的游戏环境,如 NetHack,测试模型的规划、空间推理和探索能力。BALROG 提供了一个开放且细粒度的评估框架,推动了自主代理研究的进展。
59 3
BALROG:基准测试工具,用于评估 LLMs 和 VLMs 在复杂动态环境中的推理能力
|
2月前
|
监控 测试技术 开发工具
移动端性能测试工具
移动端性能测试工具
73 2
|
2月前
|
安全 前端开发 测试技术
如何选择合适的自动化安全测试工具
选择合适的自动化安全测试工具需考虑多个因素,包括项目需求、测试目标、系统类型和技术栈,工具的功能特性、市场评价、成本和许可,以及集成性、误报率、社区支持、易用性和安全性。综合评估这些因素,可确保所选工具满足项目需求和团队能力。
|
2月前
|
安全 网络协议 关系型数据库
最好用的17个渗透测试工具
渗透测试是安全人员为防止恶意黑客利用系统漏洞而进行的操作。本文介绍了17款业内常用的渗透测试工具,涵盖网络发现、无线评估、Web应用测试、SQL注入等多个领域,包括Nmap、Aircrack-ng、Burp Suite、OWASP ZAP等,既有免费开源工具,也有付费专业软件,适用于不同需求的安全专家。
366 2
|
2月前
|
监控 网络协议 Java
一些适合性能测试脚本编写和维护的工具
一些适合性能测试脚本编写和维护的工具