Test a JavaBean

[b]问题:[/b]
如果要测试一个JavaBean,但对你来说好像写的测试似乎千篇一律又不放心。
[b]背景:[/b]
因为JavaBean跟一堆get和set方法差不多,所以你为bean编写的测试代码看起来重复性很大,这肯定无法让你感到满意,其实有很多人也都这么认为。
[b]诀窍:[/b]
在大多数情况下,测试JavaBean没什么特别的。
1. bean的一个属性就是直接与域内的数据进行交互而且不进行计算,因此测试相应的set和get方法是没多大用的。不要浪费时间做这样的事情。
2. 对于需要计算的属性值,写简单的测试程序验证属性值是否被正确的计算。
3. 对于bean的事件方法,没有什么特殊的要做;因此,将它的方法当做普通的简单方法来测试就可以了。
4. 对于bean的方法,没什么特殊的要做;因此,将它的方法当做普通的简单方法来测试就可以了。
5. 对于bean的事件方法,比如属性改变的事件,那要看前面怎么来测试了。如果将bean当作一个事件源,因为它的确也就是。

在JavaBeans方面唯一的测试技巧是正常性测试。JavaBean规范要求无参数的构造函数,然而大多数的bean都要求属性值非空。这就意味着:当构造函数完成以后,得到的对象其实并没有被完全初始化。我们称之为“不正常对象”,因为如果你这时候使用它的任何方法,你都无法确定你将获得什么结果。
为了实现正常性测试,请引入一个名为isValid()的方法,用它来确认必要的属性值是否确实为非空。你的测试使用的isValid()方法,实际上表明了哪些属性值是必要的,哪些是可以选的。就像有人说的一样,如果java.util.Calender也提供了这种方法就很好啊。

在一个简单的JavaBean类中,如果属性值直接映射为类中的一个域,那么一般来讲你无须为set方法编写测试,因为他们过于简单而很难出错。但是,如下的JavaBean测试程序仍然是值的写的。

public void testBankTransferCommandValid(){
BankTransferCommand command = new BankTransferCommand();

command.setSourceAccountId("123-456A");
command.setTargetAccountId("987-654B");
command.setAmount(Money.dollars(1000));

assertTrue(command.isReadyToExecute());
}

这个测试展示了,如果程序程序设置了accountID,target accountID和要转账的金额,那就说明command已经准备好,可以执行了。在这里为了更好地表明意图,我们将isValid()改为isReadyToExecute().这个测试验证了是否已经为转账准备了充足的条件,这个命令是否已经有效、是否可以被执行了。为了完整,我们进入如下测试:

public void testNeedsAmount(){
BankTransferCommand command = new BankATransferCommand();

command.setSourceAccountId("123-456");
command.setTargetAccountId("987-654B");
//不要设置数量
assertFalse(command.isReadyToExecute());
}

这个测试说明,如果没有提供转账的数额,命令就不能执行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值