- 浏览: 427162 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
iwwenbo:
别逗好不好
Popup.js 弹出窗口 -
bugnuke:
尼玛 跑不了。。。
Popup.js 弹出窗口 -
tangzhifei:
创建Subversion授权文件放哪目录下?前面我的都对了,到 ...
Trac系列(8):windows下Apache+SVN+Trac安装及配置(一) -
zoutuo1986:
正在安装,确实很慢,一定要选择网速快的时候安装,
eclipse 插件springide安装 -
johnsonyang:
this.jmsTemplate.send(
...
spring,weblogic配置jms
在上一讲“单元测试的尝试”里我们遇到了几个问题:
1、代码重复的问题太多
2、测试结果需要人工去检查
3、对测试的总体信息也无从得知
本讲将构建一个简单的单元测试框架来解决以上的问题:
1、代码重复的问题太多。
这个问题很容易解决,只需要把判断预期结果和实际结果的逻辑提取到某个函数中即可。从整个代码来看,有两种类型的结果的函数:
(1)返回布尔型
(2)返回整数
因此,需要两个类型的判断预期结果和实际结果是否相符的函数:XUnit系列的框架的习惯使用assert*的命名来定义判断函数,对于通过的测试习惯打印一个“.”号,而对于失败的测试习惯打印一个“F”。
- /*
- * 判断是否取值为真
- */
- void assertTrue(char *msg, bool actual)
- {
- if(actual)
- {
- printf(".");
- }
- else
- {
- printf("F");
- }
- }
- /*
- * 判断预期结果和实际结果是否相符
- */
- void assertEquals(char *msg, int expect, int actual)
- {
- if(expect == actual)
- {
- printf(".");
- }
- else
- {
- printf("F");
- }
- }
小知识:
2、测试结果需要人工去检查
对于测试结果不要使用printf方式打印被测试函数的返回结果值就可以避免这个问题。
3、对测试的总体信息也无从得知
除了问题1的解决办法里使用“.”表示测试通过和“F”表示测试失败可以提高对测试结果的信息的直观性之外,做单元测试的人还希望能够得到以下的信息:
(1)执行的测试用例总数、通过的数量和失败的数量
(2)测试执行的时间
(3)如果测试用例执行失败了,希望知道是哪个测试用例失败,从而去分析失败的原因。
下面来实现以上三个目标:
1、 为了获取已执行的测试用例数量、通过的数量和失败的数量,以及测试执行的时间,需要定义一些变量来保存这些信息:
- int errorCount = 0;
- int testCount=0;
- time_t startTime, endTime;
2、为了获取失败的测试用例信息,需要先定义一个变量来保存错误信息,同时,上面的两个断言函数也需要增加一个参数,用来传递当失败的时候要显示的失败信息。为了方便记录错误的信息,可以添加两个处理错误信息的函数:
- /*
- * 存放测试信息和错误信息的全局变量
- */
- char *errors[100] = {""};
- int errorCount = 0;
- int testCount=0;
- time_t startTime, endTime;
- /*
- * 判断是否取值为真
- */
- void assertTrue(char *msg, bool actual)
- {
- testCount++;
- if(actual)
- {
- printf(".");
- }
- else
- {
- printf("F");
- addError(msg);
- }
- }
- /*
- * 判断预期结果和实际结果是否相符
- */
- void assertEquals(char *msg, int expect, int actual)
- {
- testCount++;
- if(expect == actual)
- {
- printf(".");
- }
- else
- {
- printf("F");
- addError(msg, expect, actual);
- }
- }
失败信息的处理函数:
- /*
- * 添加错误信息
- */
- void addError(char *msg)
- {
- char error[100] = "Test '";
- strcat(error, msg);
- strcat(error, "' is failed!");
- errors[errorCount] = new char[100];
- strcpy(errors[errorCount], error);
- errorCount ++;
- }
- /*
- * 添加错误信息,带预期结果与实际结果参数
- */
- void addError(char *msg, int expect, int actual)
- {
- char error[100] = "Test '";
- char num[10];
- strcat(error, msg);
- strcat(error, "' is failed!");
- strcat(error, " Expected: ");
- strcat(error, itoa(expect, num, 10));
- strcat(error, " , actual: ");
- strcat(error, itoa(actual, num, 10));
- errors[errorCount] = new char[100];
- strcpy(errors[errorCount], error);
- errorCount ++;
- }
3、计算测试所花费的时间:
在测试开始之前开始计时,测试结束之后,停止计时。
- /*
- * 初始化测试,开始计时
- */
- void init()
- {
- printf("\n****** Test start ******\n");
- startTime = clock();
- }
- /*
- * 结束测试,结束计时,打印报告
- */
- void end()
- {
- endTime = clock();
- }
4、测试结束之后,把收集到的信息打印出来:
- /*
- * 测试报告
- */
- void testReport()
- {
- printf("\n\nTotal run Tests:"); //测试概要信息
- printf("%d", testCount);
- printf(", passed:%d", testCount-errorCount);
- printf(", failed:%d\n", errorCount);
- printf("Test escaped time: %6.3f seconds\n", (double)(endTime-startTime)/1000.0);
- if(errorCount>0) //测试失败的详细信息
- {
- printf("\n**************** Failed Test's Detail ****************\n\n");
- for(int i=0; i<errorCount; i++)
- {
- printf(" %d: ", i+1);
- printf(errors[i]);
- printf("\n");
- }
- printf("\n**************** End of Failed Detail ****************\n\n");
- }
- else //所有测试都通过
- {
- printf("\n****** All Tests had Passed! ******\n\n");
- }
- }
把这个函数放在end函数中调用:
- /*
- * 结束测试,结束计时,打印报告
- */
- void end()
- {
- endTime = clock();
- testReport();
- }
发表评论
-
“并发用户数”、“系统用户数”和“同时在线用户数”之间的差别
2008-09-28 16:16 3118一、软件性能的关注点 ... -
测试步骤
2008-09-25 16:24 1280(1)测试需求分析 (2)测试案例制定 (3)测试环境、工 ... -
如何优化你的网站代码
2008-09-18 21:18 988一个网站不管大小,其 ... -
一次性能调优的实战
2008-09-18 21:08 1155项目情况:是一个大型 ... -
j2ee性能调优之最小化资源压力测试法则
2008-09-18 19:28 1011摘要:我提倡使用最小化 ... -
开源测试工具/社区(Selenium /OpenQA.org)——今非昔比
2008-09-09 09:35 2345开源测试工具Selenium或者说开源测试社区OpenQA.o ... -
软件测试中基于关键字的自动化测试
2008-09-09 09:33 1327一、关键字概念 建立基于关键字的测试设计和测试自动化的前提 ... -
(十)白盒测试实例--集成测试的概念
2008-09-08 10:01 1955一、桩模块和驱动模块 ... -
(九)白盒测试实例--构建自己的单元测试框架2
2008-09-08 09:59 1440完整的源代码如下: 1、UnitTest.h /* * ... -
(七)白盒测试实例--单元测试的尝试
2008-09-08 09:55 1565以测试isOutOfRange函数为例,首先知道该函数在整个 ... -
(六)白盒测试实例--单元测试的步骤
2008-09-08 09:53 3877白盒测试与黑盒测试的过程和方法是有一些区别的。 单元测试的步骤 ... -
(五)白盒测试实例--编码
2008-09-08 09:51 16081、Triangle.h /* * Copyright ... -
(四)白盒测试实例--程序设计
2008-09-08 09:49 1569程序设计对于软件的质量和软件实施过程的难易程度起着至关重要的作 ... -
(三)白盒测试实例--需求分析
2008-09-08 09:47 1376需求分析是后续工作的 ... -
(二)白盒测试实例
2008-09-08 09:45 1693在教学的过程中发现,很多学生一看到这个需求,都觉得很简单,然后 ... -
(一)白盒测试实例--需求说明
2008-09-08 09:35 2053三角形的问题在很多软件测试的书籍中都出现过,问题虽小,五脏俱全 ... -
典型的测试方面的错误理解的问题集合
2008-09-08 09:21 1094在我们每天的工作中, ... -
StrutsTestCase 简化开发过程
2008-09-05 09:28 902StrutsTestCase 简化开发 ... -
junit4高级功能
2008-09-05 09:27 1493在Eclipse中使用JUnit4进行 ... -
junit4基本功能
2008-09-05 09:22 977下面上三种基本的测试用例的程序编写: 1.基本测试 imp ...
相关推荐
实例白盒 白盒测试实例之九——构建自己的单元测试框架(下) 软件测试 完整的源代码如下: 1、UnitTest.h 1./* 2.*Copyright(c)2008,胡添发 3.* 4.*简单的单元测试框架 5.* 6.*/ 7. 8.#include 9.#...
1. **白盒测试基础** - 定义与特点:解释白盒测试的定义,强调其关注代码内部逻辑的特点,以及相对于黑盒测试的优势。 - 测试目标:明确白盒测试的目标,如确保代码覆盖率,找出隐藏的逻辑错误,验证程序的数据...
Junit作为Java领域最常用的单元测试框架,是进行白盒测试的重要工具。本文档将深入探讨Junit4的基础知识和应用技巧,帮助开发者提升测试效率和代码质量。 **一、Junit简介** Junit是由Erich Gamma和Kent Beck共同...
常用的单元测试框架包括JUnit(Java)、pytest(Python)、NUnit(.NET)等,它们提供了丰富的API和测试模板,支持自动化测试、断言检查等功能,帮助开发者快速构建和运行测试用例。 #### 避免单元测试的常见误区 ...
它是用于单元测试框架体系xUnit的一个实例,主要用于白盒测试。 四种Java测试工具简介 -------------------- ### 1. JUnit JUnit是一个开发源代码的Java测试框架,用于编写和运行可重复的测试。它是用于单元测试...
单元测试是软件开发过程中的重要环节,用于验证代码的各个独立模块是否按预期工作。测试用例的设计是单元测试的核心,它确保了测试的覆盖率和有效性。本文将深入探讨如何编写测试用例,以及黑盒测试和白盒测试的区别...
### JUnit和单元测试简介 #### 一、基础知识与概念 ...总之,JUnit不仅是一个强大的单元测试框架,而且通过其丰富的特性和良好的社区支持,成为Java开发人员进行测试驱动开发(TDD)的重要工具之一。
JUnit是一种开源的Java测试框架,它属于xUnit家族的一员,主要用于单元测试,特别是白盒测试和回归测试。白盒测试是指测试人员完全了解程序内部的逻辑结构,可以针对性地进行测试;而回归测试是在软件或环境进行修复...
ACTS 是基于数据模型驱动测试引擎的的新一代测试框架,它的数据以 YAML 为载体,在此上构建基于数据模型的驱动引擎,适配 TestNg+SOFABoot 的测试上下文环境;支持高效、标准化构建用例,可视化编辑测试数据,精细化...
东北大学所提供的软件测试课件,为学生和从业者提供了一套全面、系统的教学材料,覆盖了从黑盒测试到白盒测试,再到单元测试和系统测试的全方位知识体系。 黑盒测试,作为一种功能性测试方法,它的核心理念是从用户...
《Junit实例图解:快速掌握单元测试框架》 Junit是Java开发中广泛使用的单元测试框架,它为开发者提供了一种便捷的方式来编写和执行针对单个代码单元的测试。本文将通过实例图解的方式,逐步介绍如何在Eclipse环境...
- **单元测试**:针对单个模块或函数进行测试。 - **集成测试**:验证不同模块之间的接口是否正常工作。 - **回归测试**:确保新版本没有引入新的错误或破坏旧功能。 #### 六、实例应用与练习 书中不仅提供了理论...
它包括单元测试、集成测试、系统测试和验收测试等阶段。 2. **测试类型**: - 单元测试:针对代码模块进行测试,确保每个小部分功能正确。 - 集成测试:多个模块组合后的测试,检查模块间的交互是否正确。 - ...
- **JUnit与TestNG**:Java环境下的单元测试框架,TestNG功能更为强大。 5. **性能测试**: - **压力测试**:检查系统在高负载下的表现和稳定性。 - **负载测试**:评估系统在正常和预期负荷下的性能。 - **...
- **1.6 34个方法**:介绍了34种测试方法和技术,这些方法和技术可以帮助测试人员更有效地发现缺陷,包括但不限于黑盒测试、白盒测试、压力测试等。 #### 第2章 测试架构从何而来 第二章深入探讨了测试架构的概念...
2. **测试方法论**:有多种测试方法论,如黑盒测试(关注功能行为,不考虑内部结构)、白盒测试(关注代码逻辑和结构)、灰盒测试(结合黑盒和白盒测试)以及探索性测试(强调测试者自主发现和解决问题)。...
JUnit 是一个广泛使用的Java编程语言的单元测试框架,它的核心目标是帮助开发者对代码进行单元测试,确保每个独立的代码单元都能按预期工作。单元测试通常被视为白盒测试,因为它涉及对代码内部逻辑的深入理解。 ...
- **JUnit:** 用于Java应用程序的单元测试框架,能够帮助开发者编写和运行测试用例。 #### 三、理论与技能类 1. **敏捷开发与敏捷测试** - **敏捷理念:** 强调快速响应变化、迭代开发、持续交付高质量的软件...