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


顾翔凡言:

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

目录
相关文章
|
4天前
|
敏捷开发 Java Devops
深入理解与应用软件测试中的Mock技术
【5月更文挑战第17天】 在现代软件开发过程中,单元测试是保证代码质量的重要手段。然而,对于依赖外部系统或服务的功能,如何有效进行单元测试一直是一大挑战。Mock技术的引入为这一难题提供了解决方案。本文将详细探讨Mock技术的概念、应用场景以及在实际软件测试中的优势和局限性,同时提供一些最佳实践和常见框架的使用指南。
|
5天前
|
测试技术
如何管理测试用例?测试用例有什么管理工具?YesDev
该文档介绍了测试用例和测试用例库的管理。测试用例是描述软件测试方案的详细步骤,包括测试目标、环境、输入、步骤和预期结果。测试用例库用于组织和管理这些用例,强调简洁性、完整性和可维护性。管理者可以创建、删除、重命名用例库,搜索和管理用例,以及通过层级目录结构来组织用例。此外,还支持通过Excel导入和导出测试用例,以及使用脑图查看用例关系。后台管理允许配置全局别名,如用例状态、优先级和执行结果。
|
6天前
|
开发框架 监控 Java
深入探索Spring Boot的监控、管理和测试功能及实战应用
【5月更文挑战第14天】Spring Boot是一个快速开发框架,提供了一系列的功能模块,包括监控、管理和测试等。本文将深入探讨Spring Boot中监控、管理和测试功能的原理与应用,并提供实际应用场景的示例。
17 2
|
6天前
|
机器学习/深度学习 人工智能 运维
深入探索软件测试:策略、工具与未来趋势
【5月更文挑战第14天】在软件开发的生命周期中,测试环节扮演着至关重要的角色。它不仅保证产品能够达到预定的质量标准,还有助于提前发现并修复潜在的缺陷,从而减少维护成本和提高用户满意度。本文将深入探讨当前软件测试领域的最佳实践,包括测试策略的制定、工具的选择以及面对快速变化的技术环境如何保持测试活动的前瞻性和灵活性。通过分析自动化测试、性能测试和安全测试等关键领域,本文旨在为读者提供一个全面的软件测试指南,同时对未来的发展趋势进行预测。
|
6天前
|
存储 人工智能 测试技术
python自动化测试实战 —— CSDN的Web页面自动化测试
python自动化测试实战 —— CSDN的Web页面自动化测试
196 0
|
6天前
|
Web App开发 设计模式 测试技术
python自动化测试实战 —— 自动化测试框架的实例
python自动化测试实战 —— 自动化测试框架的实例
18 0
|
6天前
|
监控 数据可视化 IDE
python自动化测试实战 —— 单元测试框架
python自动化测试实战 —— 单元测试框架
20 2
|
6天前
|
Web App开发 JavaScript 测试技术
python自动化测试实战 —— WebDriver API的使用
python自动化测试实战 —— WebDriver API的使用
9 1
|
6天前
|
网络协议 安全 测试技术
性能工具之emqtt-bench BenchMark 测试示例
【4月更文挑战第19天】在前面两篇文章中介绍了emqtt-bench工具和MQTT的入门压测,本文示例 emqtt_bench 对 MQTT Broker 做 Beachmark 测试,让大家对 MQTT消息中间 BenchMark 测试有个整体了解,方便平常在压测工作查阅。
140 7
性能工具之emqtt-bench BenchMark 测试示例
|
6天前
|
机器学习/深度学习 数据采集 人工智能
【专栏】AI在软件测试中的应用,如自动执行测试用例、识别缺陷和优化测试设计
【4月更文挑战第27天】本文探讨了AI在软件测试中的应用,如自动执行测试用例、识别缺陷和优化测试设计。AI辅助工具利用机器学习、自然语言处理和图像识别提高效率,但面临数据质量、模型解释性、维护更新及安全性挑战。未来,AI将更注重用户体验,提升透明度,并在保护隐私的同时,通过联邦学习等技术共享知识。AI在软件测试领域的前景广阔,但需解决现有挑战。

热门文章

最新文章