进入旧版 | 服务项目 | 成功案例 | 联系方式 | 过客留言 | 友情链接
   
设为首页
加入收藏
联系我们
网站首页 | 新闻资讯 | 操作系统 | 办公软件 | 网络软件 | 工具软件 | 媒体动画 | 网页制作 | 网站开发 | 程序开发 | 平面设计
Photoshop视频教程 | Word入门 | Flash入门 | JScript | VBScript | ASP | PHP | ADO | 网页特效 | 3DS MAX6.0命令 | 系统进程
您当前的位置:GOODSGY电脑学习网 -> 程序开发 -> JAVA -> 文章内容  
面向Java程序员的db4o指南: 数组和集合

www.goodsgy.com

 www.goodsgy.com

填充和测试对象模型

  对于清单 2 中的 Person 类,需要重点注意的是,如果以关系的方式,使用父与子之间分层的、循环的引用来建模,那肯定会比较笨拙。通过一个实例化的对象模型可以更清楚地看到我所谈到的复杂性,所以我将编写一个探察测试来实例化 Person 类。注意,清单 3 中省略了 JUnit 支架(scaffolding);我假设您可以从其他地方,包括本系列之前的文章学习 JUnit 4 API。通过阅读本文的源代码,还可以学到更多东西。

  清单 3. 幸福家庭测试

@Test public void testTheModel()
{
 Person bruce = new Person("Bruce", "Tate",
 Gender.MALE, 29, Mood.HAPPY);
 Person maggie = new Person("Maggie", "Tate",
 Gender.FEMALE, 29, Mood.HAPPY);
 bruce.setSpouse(maggie);

 Person kayla = maggie.haveBaby("Kayla", Gender.FEMALE);

 Person julia = maggie.haveBaby("Julia", Gender.FEMALE);

 assertTrue(julia.getFather() == bruce);
 assertTrue(kayla.getFather() == bruce);
 assertTrue(julia.getMother() == maggie);
 assertTrue(kayla.getMother() == maggie);

 int n = 0;
 for (Iterator<Person> kids = bruce.getChildren(); kids.hasNext(); )
 {
  Person child = kids.next();

  if (n == 0) assertTrue(child == kayla);
  if (n == 1) assertTrue(child == julia);

  n++;
 }
}

  目前一切尚好。所有方面都能通过测试,包括小孩 ArrayList 的使用中的长嗣身份。但是,当我增加 @Before 和 @After 条件,以便用我的测试数据填充 db4o 数据库时,事情开始变得更有趣。

  清单 4. 将孩子发送到数据库

@Before public void prepareDatabase()
{
 db = Db4o.openFile("persons.data");

 Person bruce = new Person("Bruce", "Tate", Gender.MALE, 29, Mood.HAPPY);
 Person maggie = new Person("Maggie", "Tate", Gender.FEMALE, 29, Mood.HAPPY);
 bruce.setSpouse(maggie);

 bruce.setHomeAddress(new Address("5 Maple Drive", "Austin", "TX", "12345"));
 bruce.setWorkAddress( new Address("5 Maple Drive", "Austin", "TX", "12345"));
 bruce.setVacationAddress(new Address("10 Wanahokalugi Way", "Oahu", "HA", "11223"));

 Person kayla = maggie.haveBaby("Kayla", Gender.FEMALE);
 kayla.setAge(8);

 Person julia = maggie.haveBaby("Julia", Gender.FEMALE);
 julia.setAge(6);

 db.set(bruce);

 db.commit();
}

  注意,存储整个家庭所做的工作仍然不比存储单个 Person 对象所做的工作多。您可能还记得,在上一篇文章中,由于存储的对象具有递归的性质,当把 bruce 引用传递给 db.set() 调用时,从 bruce 可达的所有对象都被存储。不过眼见为实,让我们看看当运行我那个简单的探察测试时,实际上会出现什么情况。首先,我将测试当调用随 Person 存储的各种 Address 时,是否可以找到它们。然后,我将测试是否孩子们也被存储。

  清单 5. 搜索住房和家庭

@Test public void testTheStorageOfAddresses()
{
 List<Person> maleTates = db.query(new Predicate<Person>() {
  public boolean match(Person candidate) {
   return candidate.getLastName().equals("Tate") &&
    candidate.getGender().equals(Gender.MALE);
  }
 });
 Person bruce = maleTates.get(0);

 Address homeAndWork = new Address("5 Maple Drive", "Austin", "TX", "12345");
 Address vacation = new Address("10 Wanahokalugi Way", "Oahu", "HA", "11223");

 assertTrue(bruce.getHomeAddress().equals(homeAndWork));
 assertTrue(bruce.getWorkAddress().equals(homeAndWork));
 assertTrue(bruce.getVacationAddress().equals(vacation));
}

@Test public void testTheStorageOfChildren()
{
 List<Person> maleTates = db.query(new Predicate<Person>() {
  public boolean match(Person candidate) {
   return candidate.getLastName().equals("Tate") &&
   candidate.getGender().equals(Gender.MALE);
  }
 });
 Person bruce = maleTates.get(0);

 int n = 0;
 for (Iterator<Person> children = bruce.getChildren();
 children.hasNext();
)
{
 Person child = children.next();
 System.out.println(child);
 if (n==0) assertTrue(child.getFirstName().equals("Kayla"));
 if (n==1) assertTrue(child.getFirstName().equals("Julia"));

 n++;
}
}

 www.goodsgy.com

www.goodsgy.com

上一页  [1] [2] [3]  下一页

在百度中搜索:面向Java程序员的db4o指南: 数组和集合
在Google中搜索:面向Java程序员的db4o指南: 数组和集合
在Yahoo中搜索:面向Java程序员的db4o指南: 数组和集合

收藏到网摘:新浪VIVI 365key 我摘 POCO网摘 博采中心 YouNote 和讯网摘 天天收藏
[] [返回上一页] [打 印] [收 藏]

 相关文章    最新文章
· 微软面向黑莓推出语音网络搜索软件
· Java中消除实现继承和面向接口编程
· 浅谈JavaScript中面向对象技术的模拟
· [组图] AJAX中JavaScript支持面向对象的基..
· 面向HTML6.0:W3C启动下一代Web语言
· 面向搜索引擎的网站设计
· PHP中实现面向对象编程
· 利用索引服务和ASP建立面向整个网站搜索程..
· 面向对象的asp编程之九---客户器端函数
· 面向对象的asp编程之八---服务器端函数
 
· 面向Java程序员的db4o指南: 数组和集合
· Java与.NET 谁才能主宰未来?
· Java编程技术中汉字问题的分析及解决
· Java 泛型的理解与等价实现
· 在Java中利用JCOM实现仿Excel编程详解
· [图文] Java小技巧:关于Cookie的操作
· Java中消除实现继承和面向接口编程
· Java实战篇:设计自己的Annotation
· 使用Java程序的泛型应该注意的几个地方
· JPCAP——Java中的数据链路层控制

∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论…]
站内搜索

精彩图文
  网站导航  
操作系统 办公软件 网络软件
Vista Windows2003 WindowsXP Windows2000/NT Windows9X/ME Linux 其他 Word Excel Powerpoint Outlook 金山系列 其他 网页浏览 上传下载 联络聊天 邮件工具 服务器软件 网络辅助
工具软件 媒体动画 网页制作
系统工具 媒体工具 压缩工具 图文处理 文件管理 其他 3DMAX Authorware Director Maya 视频处理 其他 Flash Dreamweaver FireWorks FrontPage LiveMotion Golive HTML/CSS 其它
网站开发 平面设计 程序设计
ASP JSP PHP CGI JavaScript VBScript XML/SOAP Web服务器 Photoshop PhotoImpact CorelDraw Illustrator Freehand 设计欣赏 其他 VB VC .NET C/C++ DELPHI JAVA

冀ICP备05019428号
Copyright © 2004-2008 电脑学习网 Inc.All rights reserved.
TEL:13832340607
QQ:39873155
E_Mail:goodsgy(#)hotmail.com   (把(#)替换成@)
MSN:goodsgy(#)hotmail.com   (把(#)替换成@)