- 浏览: 446390 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (354)
- 面向对象分析设计/系统架构 (12)
- Mysql/Orcal11g (13)
- JSP/Java//Python/Xharbour (66)
- 软件测试 (21)
- 信息安全小知识 (1)
- Android (5)
- IT生活/哲学/兵法 (23)
- 软件工程/UML/需求分析学习与实践 (6)
- 操作系统/网络/组成原理 (9)
- 持续集成Maven/Hudson/自动化测试 (9)
- eBay /Paypal developer (10)
- Hadoop/HBase/Solr (0)
- 重构分析及其思考 (2)
- 企业架构 (7)
- 分析模式/设计模式 (4)
- SSH学习笔记 (1)
- Quartz及其JWatch监控 (0)
- Linux服务器 (0)
- ExtJs学习笔记 (1)
- 重读java编程思想 (3)
- ESB/SOA/WebServices (0)
- SpringMVC/Struts/Hibernate/Spring (7)
- Xharbour/Pelles C/ SQLite3 (0)
- Magento 电商 (1)
- Object C (1)
- note/redis (0)
- SpringBoot (0)
最新评论
-
snow8261:
太粗略了。
企业架构之数据架构 -
haithink:
面试成功没?
JVM 加载Class文件的原理及其机制 -
feisi0003731843:
不好意思我没有重启,重启后好多了,可有的地方回放还是不成功的。 ...
Selenium IDE测试ExtJs一种测试解决办法 -
feisi0003731843:
这个好像不行吧,我试过了不好使啊。还是用id来做的。不能用啊。 ...
Selenium IDE测试ExtJs一种测试解决办法 -
yuchensuifeng:
您好,静态页面是可以的,但是,我指定error-page为js ...
JSP创建错误处理页面
[/b][b]问题:
当为一个产品类编写了好几个测试,它们含有重复的代码。因为我们知道重复的代码是软件中很多问题的根源,怎么 消除代码中的重复性。
背景:
为同一个产品类编写几个测试的时候,你最先注意到的模式之一就是每个测试开始的那几行代码总是很相像。每个测试都有三个基本的组成部分:创建一个对象,调用一些方法,检查结果。每个测试的第二部分总是不同的,对不同方法的调用可以区别不同的测试:"如果用这些参数调用构造方法,希望看到这样的结果;但是如果传递了空值,那么构造方法应该抛出那样的异常"。
测试的第3部分,检查结果,这完全依赖于你所调用的方法,如果测试调用的是不同的方法,当然期望的结果也是不同的。一般情况下,在这部分,只有在反复调用同一个方法的时候才会有重复代码出现。
然而,创建对象会产生测试之间的重复代码,而且绝大部分重复的代码都出现在这里,在一个类中除了构造方法以外还有很多方法需要测试,所以一旦为这个类编写了第二个测试,就重复了第一个测试中"创建一些对象"的部分,因为很可能用相同的参数调用了相同的构造方法,这样的重复代码实在是很常见,所以如果Junit能有一种内置的机制来消除它,那就再好不过了。
那么如果将要测试的对象称为测试模块:一种对象的"配置",其行为是可以预见的。这样的话,我们可以将测试第一部分----"创建一些对象"称为“创建一个测试模块”。目的是创建一些对象并且将其初始化成某种已知的状态,以便在使用它们调用一些方法的时候,可以预见到结果。
技巧:
从测试中找出重复的测试模块代码,将这些代码移动到一个叫做setUp()的方法里面。修改后的代码可能不需要编译,因为现在是在setUp()方法中声明变量,然后在测试中使用这些变量。将这些变量放在实例级的参数域中,这样setUp()和测试代码都可以使用它们。因为每个测试是执行在其自己的实例中,所以不必担心在不同测试之间实例级的参数域会被错误地改变。在执行测试的时候,test runner会在每个测试之前调用setUp()方法。测试类中的每个测试都可以使用这个通用的方法初始化。
代码演示:
下面代码Money JavaBean及方法就不给出,可以根据测试代码,自己推出
注意上面的三个测试的第一行几乎是一样的,似乎可以将这个对象移到setUp()方法里。因为testAdd()方法将这个对象叫做added而其他叫money,首先需要将added相关money以使得三个测试的第一行都一样,然后就可以将这一行移到setUp()方法里去。最后,将money从一个本地变量变成一个实例级的参数域,使得setUp()和所有的测试都可以使用它。接着看看改动后的代码:
上面这样的做,我们其实在数学中有个概念很好的用来说下:那就是将方程式进行变形然后提取公因式。任何东西都是可以进行检讨和讨论
讨论:
Junit通过方法setUp()和teatDown()提供了对测试模块的支持,可以在junit.framework.TestCase中找到他们。在创建TestCase的子类的时候,可以重载这些方法来为每个测试建立或者销毁测试模块。要了解Junit是如何使用这些方法的,可以查看另一个TestCase方法runBare()的代码:
在执行测试的时候,框架会首先调用runBare()方法来设置一个测试模块,运行测试,然后再撤销测试模块。注意将tearDown()放在finally块中,就能保证它一定被执行,即使测试失效,这个方法是为了释放资源,避免资源浪费。
当为一个产品类编写了好几个测试,它们含有重复的代码。因为我们知道重复的代码是软件中很多问题的根源,怎么 消除代码中的重复性。
背景:
为同一个产品类编写几个测试的时候,你最先注意到的模式之一就是每个测试开始的那几行代码总是很相像。每个测试都有三个基本的组成部分:创建一个对象,调用一些方法,检查结果。每个测试的第二部分总是不同的,对不同方法的调用可以区别不同的测试:"如果用这些参数调用构造方法,希望看到这样的结果;但是如果传递了空值,那么构造方法应该抛出那样的异常"。
测试的第3部分,检查结果,这完全依赖于你所调用的方法,如果测试调用的是不同的方法,当然期望的结果也是不同的。一般情况下,在这部分,只有在反复调用同一个方法的时候才会有重复代码出现。
然而,创建对象会产生测试之间的重复代码,而且绝大部分重复的代码都出现在这里,在一个类中除了构造方法以外还有很多方法需要测试,所以一旦为这个类编写了第二个测试,就重复了第一个测试中"创建一些对象"的部分,因为很可能用相同的参数调用了相同的构造方法,这样的重复代码实在是很常见,所以如果Junit能有一种内置的机制来消除它,那就再好不过了。
那么如果将要测试的对象称为测试模块:一种对象的"配置",其行为是可以预见的。这样的话,我们可以将测试第一部分----"创建一些对象"称为“创建一个测试模块”。目的是创建一些对象并且将其初始化成某种已知的状态,以便在使用它们调用一些方法的时候,可以预见到结果。
技巧:
从测试中找出重复的测试模块代码,将这些代码移动到一个叫做setUp()的方法里面。修改后的代码可能不需要编译,因为现在是在setUp()方法中声明变量,然后在测试中使用这些变量。将这些变量放在实例级的参数域中,这样setUp()和测试代码都可以使用它们。因为每个测试是执行在其自己的实例中,所以不必担心在不同测试之间实例级的参数域会被错误地改变。在执行测试的时候,test runner会在每个测试之前调用setUp()方法。测试类中的每个测试都可以使用这个通用的方法初始化。
代码演示:
下面代码Money JavaBean及方法就不给出,可以根据测试代码,自己推出
public class MoneyTest extends TestCase{ public void testAdd(){ Money added = new Money(12,50); Money augend = new Money(12,50); Money sum = added.add(augend); assertEquals(2500,sum.inCents()); } public void testNegate(){ Money money = new Money(12,50); Money opposite = money.negate(); assertEquals(-1250,opposite.inCents()); } public void testRound(){ Money money = new Money(12,50); Money rounded = money.roundToNearestDollar(); assertEquals(1300,rounder.inCents()); } }
注意上面的三个测试的第一行几乎是一样的,似乎可以将这个对象移到setUp()方法里。因为testAdd()方法将这个对象叫做added而其他叫money,首先需要将added相关money以使得三个测试的第一行都一样,然后就可以将这一行移到setUp()方法里去。最后,将money从一个本地变量变成一个实例级的参数域,使得setUp()和所有的测试都可以使用它。接着看看改动后的代码:
public class MoneyTest extend TestCase{ private Money money; protected void setUp()throws Exception{ money = new Money(12,50); } public void testAdd(){ Money sum = added.add(augend); assertEquals(2500,sum.inCents()); } public void testNegate(){ Money opposite = money.negate(); assertEquals(-1250,opposite.inCents()); } public void testRound(){ Money rounded = money.roundToNearestDollar(); assertEquals(1300,rounder.inCents()); } }
上面这样的做,我们其实在数学中有个概念很好的用来说下:那就是将方程式进行变形然后提取公因式。任何东西都是可以进行检讨和讨论
讨论:
Junit通过方法setUp()和teatDown()提供了对测试模块的支持,可以在junit.framework.TestCase中找到他们。在创建TestCase的子类的时候,可以重载这些方法来为每个测试建立或者销毁测试模块。要了解Junit是如何使用这些方法的,可以查看另一个TestCase方法runBare()的代码:
public void runBare()throws Throwable{ setUp(); try{ runTest(); } finally{ tearDown(); } }
在执行测试的时候,框架会首先调用runBare()方法来设置一个测试模块,运行测试,然后再撤销测试模块。注意将tearDown()放在finally块中,就能保证它一定被执行,即使测试失效,这个方法是为了释放资源,避免资源浪费。
发表评论
-
YourKit Java Profiler 9.5.1 分析思考一
2010-12-10 09:06 2419以下是我对使用YoutKit 对程序分析的一些想法! 程序分 ... -
YourKit Java Profiler 9.5.1 试用总结一
2010-12-06 09:15 3719近日接到学习任务研究下YourKit来解决项目中对内存 ... -
性能测试(并发负载测试)测试分析
2010-01-04 10:47 1044声明:此文章是从网络上转载下来的,至于真实出处无法找到。 ... -
使用JUnit创建TestCase
2009-12-29 22:05 3100在学会了对单个方法、类、接口等进行测试后,接着看看这么创建 ... -
如何防范SQL注入<测试篇>
2009-12-24 11:48 4189前一篇是关于编程防 ... -
Junit---Introduce a Base Test Case
2009-12-21 20:24 1098问题: 如果有一个通用方法的集合并且希望在测试中尽可能多的 ... -
怎么提取一个测试层次结构
2009-12-18 20:29 1083问题: 如果有多个 ... -
Test an object that instantiates other objects
2009-12-10 20:30 958问题: 你想测试一个 ... -
Junit(Let collections compare themselves)
2009-12-08 19:26 1509问题: 你想验证容器的内容,而你第一个想到的办法是逐个 ... -
测试是否抛出正确的异常(Test throwing the right exception)
2009-12-07 21:28 5272问题: 你是否想 ... -
Test a JavaBean
2009-12-05 18:10 882问题: 如果要测试一 ... -
Test an interface(测试接口)
2009-11-30 22:52 2276问题: 你是否想过怎么测试接口,但是又苦于接口没有办法 ... -
Test a setter(Junit 测试setter方法)
2009-11-29 14:27 1784问题: setter方法怎 ... -
Junit Test a getter
2009-11-28 12:16 1059问题: 怎么测试一个对象的get方法?怎么判断哪些需要 ... -
Junit测试构造函数
2009-11-28 00:22 5081构造函数对于测试者 ... -
测试没有返回值的方法
2009-11-26 22:28 7089在使用JUnit进行单元测试的时候,常会碰到返回值为viod的 ... -
JUnit 测试学习笔记二
2009-11-16 22:43 1427现在看看JUnit怎么测试equals()方法 首先分析下e ... -
JUnit测试学习笔记一
2009-11-09 22:25 2027在软件测试中,最基 ... -
何为软件可测试
2009-10-26 11:04 784软件工程发展了二十多 ... -
自动化测试
2009-10-13 09:34 1029关于自动化测试现在 ...
相关推荐
faker是python的一个第三方模块,是一个github上的开源项目。 主要用来创建一些测试用的随机数据。 官方文档:https://faker.readthedocs.io/en/master/index.html faker的使用: 1.安装模块 pip3 install Faker...
整个解调模块的测试以及验证过程。解调模块的设计采用的是基 -2 按时间抽取的 方法来实现的。以 altera 公司提供的 quartus ii 11.0 为软件平台,利用 VHDL 描 述的方式实现了 12 位 512 点的 FFT 解调,并且...
本书光盘提供12个项目开发完整案例的同步教学视频,12个项目开发完整案例及其源程序,本书的服务网站还提供了内容丰富的素材库、题库、模块库、案例库和本书的答疑服务等。 本书是一本项目开发案例方面的参考书...
第3章 第一模块:训练结果测试与验证 第4章 第一模块:模型源码DEBUG演示 第5章 第二模块:使用分割模块训练自己的数据集 第6章 第二模块:基于Unet进行各种策略修改 第7章 第二模块:分割任务CVPR最新Backbone设计...
提出基于SPARDL(space aircraft description language)的模型和程序一致性测试方法, 通过模型抽取获取模式迁移图和控制流程图, 通过程序插桩获取程序执行路径, 实现了自动检测周期控制系统中的模式迁移和模块调用的...
第3章 第一模块:训练结果测试与验证 第4章 第一模块:模型源码DEBUG演示 第5章 第二模块:使用分割模块训练自己的数据集 第6章 第二模块:基于Unet进行各种策略修改 第7章 第二模块:分割任务CVPR最新Backbone设计...
有声书城 SpringBoot;JQuery;MYSQL 基于JSP的有声书城专门为那些喜欢在线阅读的人士服务,除了可以在线进行阅读之外,书城还有提供...确定了模块以后,再设计各个模块的功能特点,方便抽取出各个模块的公共部分来。
有声书城 SpringBoot;JQuery;MYSQL 基于JSP的有声书城专门为那些喜欢在线阅读的人士服务,除了可以在线进行阅读之外,书城还有提供...确定了模块以后,再设计各个模块的功能特点,方便抽取出各个模块的公共部分来。
在抽取试题上,系统使用随机抽取试题的方式,体现了考试的客观与公正。 当考生答题完毕之后,提交试卷即可得知本次考试的得分,体现系统的高效性。在后台管理上,分后台管理员管理模块和试题管理模块。 分别适应...
对齐短语是决定统计机器翻译系统质量的核心模块。提出基于短语结构树的层次短语模型,这是利用串-树模型的思想对层次短语模型的扩展。基于短语结构树的层次短语模型是在双语对齐短语的基础之上结合英语短语结构树...
提出一种混合的原子分解算法,首先利用有向超图表示EL子本体,形成部分原子分解,利用模块抽取方法添加剩余非EL公理,得到本体的全部原子分解。以生物医学本体作为测试数据,实验表明,这种混合的原子分解算法能够...
⼤数据应⽤测试经验总结 ⼤数据应⽤测试经验总结 ⼤数据应⽤测试过程与传统的web系统有较⼤的不同,⼤数据应⽤测试通常会分为web侧和ETL侧测试,web侧基本就是功能测试,⽽ETL(Extracting-Transfroming- Loading)...
SpringMVC:SpringMVC是Spring的一个模块,它是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架。 MyBatis:MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。 微信小程序...
● 测试(发现并改正错误,分为模块测试、集成测试和系统联调三级); ● 运行维护(扩充功能、纠错等)。 习题二答案 一、 选择题 1. 需求分析的主要目的是(B C)。 A) 系统开发的具体方案 B) 进一步确定用户的...
在开发/测试一个复杂系统的时候我们经常遇到开发/测试中的模块依赖其它服务的情况。比如一个系统有两个模块A和B,A模块依赖于B模块提供的服务: B部分功能还未完成开发导致A模块开发被阻塞; B模块有些数据不好...
在树结构中,每一个结点只有一个前件,称为父结点,没有前件的结点只有一个,称为树的根结点,简称树的根。例如,在图1-1中,结点A是树的根结点。 子结点和 叶子结点 在树结构中,每一个结点可以有多个后件,称为该...
一个源代码包含多个相关功能代码。在二期系统中 ,我们改善了子系统的设计,增强各个模块的内聚性,降低模块之间的耦合性。首先, 各个功能的相关代码处于不同的代码目录;其次,各模块都做成了单独的静态库,总控 ...
一个源代码包含多个相关功能代码。在二期系统中 ,我们改善了子系统的设计,增强各个模块的内聚性,降低模块之间的耦合性。首先, 各个功能的相关代码处于不同的代码目录;其次,各模块都做成了单独的静态库,总控 ...
主要测试模块包括以下几点: 1. 通过VLAN的划分抑制广播风暴,并实现不同VLAN间相互通信的需求。 2. 三层交换机各端口设置参数及其功能特点。 3. 通过静态路由、RIP协议实现各VLAN间的相互通信。 在此基础上总结并...
当前业界文本语义信息抽取基本是使用正则表达式来完成的,正则表达式本身并不提供管理与测试功能。 在进行基于正则的文本语义抽取的时候,还需要做大量的基础工作,来便于编写、管理和测试正则表达式。 本项目提供...