快速业务通道

JUnit断言扩展 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
outside instantiation   private Title() {   } }

这个源代码现在需要通过满足一些更具体的需求来变得更强壮、功能更完整,例如以下一些典型需求:

Person 类根据 equals(Object) 和 hashCode() 方法的合约来重写这两个方法,以便该类可以有效地用在 Collection 类型中。

Person 类实现 java.io.Serializable 接口,进行无误的序列化和反序列化。

Person 类没有被声明为 final,因此能够派生子类。

Title 类被声明为 final,因为它不公开任何构造函数(这意味着它不能派生子类)。把设计决策的采用写下来是一个良好习惯,这样就能在源代码和生成的 API 文档中看到 final 修饰符。

Title 类实现 java.io.Serializable 接口,无误地序列化和反序列化。而且序列化到同一实例(符合 Typesafe Enumeration 设计模式的要求)。

Title 类有一个 private 的默认构造函数(没有参数),防止来自外部类的实例化。

在 JUnit 测试环境中,可以容易地用 JUnitX 对所有这些需求进行断言。清单 2 中的源代码是一套 JUnit 测试用例,用 JUnitX 功能对所有需要满足的需求进行断言:

清单 2. 使用 JUnitX 断言的 JUit 测试用例

import JUnit.framework.TestCase; import JUnitx.framework.ObjectFactory; import JUnitx.framework.Assert; import java.io.Serializable; import java.lang.reflect.Constructor; public class TestRequirements extends TestCase {   public void testPersonEqualsAndHashCodeContract() {    // Different surnames should be unequal.    ObjectFactory factory = new ObjectFactory() {     public Object createInstanceX() {      return new Person(Title.MR, "Bob", "Brown");     }     public Object createInstanceY() {      return new Person(Title.MR, "Bob", "Smith");     }    }    // Make sure the object factory meets its contract for testing.    // This contract is specified in the API documentation.    Assert.assertObjectFactoryContract(factory);    // Assert equals(Object) contract.    Assert.assertEqualsContract(factory);    // Assert hashCode() contract.    Assert.assertHashCodeContract(factory);   }   public void testPersonSerialization() {    // Assert that the Person class directly implements Serializable.    Assert.assertDirectInterfaceOf(Person.class, Serializable.class);    // Assert that the Person instance can be serialized and deserialized without errors.    Assert.assertSerializes(new Person(Title.MR, "Joe", "Blog"));   }   public void testPersonNotFinal() {    // Assert that the Person class is not declared final.    Assert.assertNotFinal(Person.class);   }   public void testTitleFinal() {    // Assert that the Title class is declared final.    Assert.assertFinal(Title.class);   }   public void testTitleSerialization() {    // Assert that the Title class directly implements Serializable.    Assert.assertDirectInterfaceOf(Person.class, Serializable.class);    // Assert that the Title instances can be serialized and deserialized without errors.    Assert.assertSerializes(Title.MR);    Assert.assertSerializes(Title.MS);    Assert.assertSerializes(Title.MRS);    // Assert that serialization results in

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号