如何测试一个构造函数

上一篇 / 下一篇  2010-12-03 18:13:14 / 个人分类:学习中

构造函数对于测试者来说有点像自己咬自己的尾巴!还有测试者认为,构造函数有什么好测试的。不过既然是做单元测试,那么构造函数也是要进行测试的。

如何测试一个构造函数呢?

  想法1:
  大家知道通过构造函数可以创建一个对象,测试常考虑assertEquals()方法。这样看来测试非常简单,如果这样进行测试的话,只需写一行代码就够了。但是有个问题,如果你要创建期望值,那么没有问题,也就需要使用你要测试的构造函数。这样的测试有点难以给人满意。
现在通过分析我们将想法1设置为不是最好的测试办法。那么我们到底该怎么找出一个最优的测试方法来测试构造函数呢?

妙诀:
   如果你的类有可读的属性值的话,那么办法很简单:你可以将它们与你传递给构造函数的参数进行比较。在这里,可读的属性值可以是一个直接的变量域,也可以通过get方法获取。
注意:
   仅仅对测试而言---- 最常见的测试类的方法是,完全通过它们的public接口。如果你把这个作为准则的话,有时候你就必须给类添加public接口以取得需要的数据,用来验证特定的行为。

最简单的构造函数的测试程序:暴露所生成对象的内部状态,以验证被传递给构造函数的参数是否被设置成正确的属性值。例如:
Java代码 复制代码

   1. public void testInitializationParameters(){  
   2.   assertEquals(762, new Integer(762).intValue());  
   3.  } 

 public void testInitializationParameters(){
   assertEquals(762, new Integer(762).intValue());
  }


使用intValue()方法获取Integer对象内部的属性值,以验证我们传递给构造函数的参数是否正确的存储到对象中。get方法相当于这里的intValue方法。

如果你的类不能看到可读的属性值,那你就必须另外创建一些可观测的断点,用来验证构造函数的正确性。例如:
Java代码 复制代码

   1.  public void testInitizationParameters(){  
   2.     BankDepositCommand command = new BankDepositCommand(  
   3. "123", Money.dollars(125,50),today());  
   4. assertTrue(command.isValid());  
   5. } 

 public void testInitizationParameters(){
    BankDepositCommand command = new BankDepositCommand(
"123", Money.dollars(125,50),today());
assertTrue(command.isValid());
}


以上的技巧可以用来测试JavaBean。

讨论总结: 
   很多测试看起来都很简单,甚至被很多人认为不必去写什么测试。但是某些情况下,可能恰恰是这些我们认为不必去写测试的地方导致程序的缺陷的出现。因此如果你想降低错误的发生概率,请你还是要写测试,不管它有多么简单。

TAG:

 

评分:0

我来说两句

Open Toolbar