分享
 
 
 

Unit测试技巧:如何手动设置待测试Bean的属性

王朝java/jsp·作者佚名  2006-03-10
窄屏简体版  字體: |||超大  

在JUnit测试中,通常作为POJO的Java Bean都是一组简单的getter/setter方法,需要测试的不是这些Bean本身,而是对Bean的属性设置后,测试业务方法是否正常工作,例如,一个注册用户的类方法void register(Account account),需要对传入的Account Bean做初始化设置,然后,根据业务规则决定register方法是否应该执行成功或者抛出IllegalArgumentException。

倘若按照常规的Unit测试,需要考虑用户输入的许多种组合,在testXxx()方法中编写模拟用户输入的代码是冗长而繁琐的,不如直接通过Swing窗口手动设置Bean的属性,然后再执行业务方法,这样,虽然引入了输入界面,需要人工干预测试过程,却大大简化了编写测试用例的麻烦。

在TCK测试中,对许多UI组件的测试正是采用这种半自动的方法,因为只有测试人员本身才能看到UI测试的结果正确与否,计算机很难判断一个类似fillRect()的方法到底有没有在屏幕上正确绘制出来。

基于这种思想,为了测试许多种不同输入的组合,我们决定编写一个能根据Bean的属性自动生成输入窗口的小工具,以便在Unit测试过程中,能够由测试人员手动设定Bean的属性和期望的结果,然后,继续测试。

为了实现这个目的,我们设计了一个小工具,它能够实现:

1.根据传入的Bean自动为每个public setXxx()方法生成输入框;

2.由测试人员手动设置Bean的属性,然后,选择“Success”,“Failure”以决定这次测试的数据应该产生正确或错误的结果。

3.可以连续多次循环测试,直到测试人员点击“End”,结束本次测试。

整个工具被封装在一个BeanInputDialog类中,它继承自JFrame,只暴露了一个public static方法。下面,我们以一个Account Bean为例,测试用户输入的属性是否合法。

Account定义了4个字段和一个validate()方法来验证输入,如果不符合输入,validate()方法会抛出IllegalArgumentException。我们编写一个简单的TestCase:

package com.crackj2ee.test.util;

import junit.framework.TestCase;

public class AccountTest extends TestCase {

public void testAccount() {

int expect;

for(;;) {

Account account = new Account(); // 待测试的Bean

expect = BeanInputDialog.inputBean(account); // 用户在此输入

// 注意:直到用户输入完成,inputBean()方法才会返回,它是一个同步方法

// inputBean()方法返回一个int,表示本次测试的期望值

if(expect==BeanInputDialog.EXPECT_END) // 期望测试结束,退出循环

break;

if(expect==BeanInputDialog.EXPECT_SUCCESS) { // 期望测试成功

account.validate();

}

if(expect==BeanInputDialog.EXPECT_FAILURE) { // 期望测试失败

try {

account.validate();

fail("Not catch IllegalArgumentException!"); // 没有捕获到预期的异常

}

catch(IllegalArgumentException e) {

// OK!捕获到预期的异常

}

}

}

}

}

在Unit测试过程中,可以不断设置Bean的属性,以满足多种组合的测试用例。下面分别输入合法和非法的用户名,然后点击期望值测试:

需要注意的是,由于属性的获取是通过反射得到的,考虑到通常的设计原则,我们只读取public的setXxx()方法。

如果在测试人员输入前,Bean已经有了一些初始值,这个工具也能通过反射得到相应的getXxx()方法的值。要注意的是,对boolean和Boolean类型的属性,是根据getXxx()取得而不是根据isXxx()取得的。

目前,可以处理的属性类型包括java.lang.String,java.util.Date,short,int,long,float,double,boolean及其包装类型Short,Integer,Long,Float,Double和Boolean。还可以对其扩展,以便支持更多的类型。

源代码下载:

http://www.crackj2ee.com/Article/ShowArticle.asp?ArticleID=387

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有