• 测试技术
  • 博客
  • 视频
  • 开源
  • 论坛
  • 沙龙
  • 下载
  • 杂志
  • 招聘

字号: | 推荐给好友 上一篇 | 下一篇

对DAO编写单元测试

发布: 2008-1-21 16:45 | 作者: 廖雪峰 | 来源: 希赛网 | 查看: 141次 | 进入领测软件测试网论坛讨论

领测软件测试网 软件测试技术门户cPW~8?&r-_&|


)LL/l Y(mpublic abstract class TransactionCallback {
/M q4Q lR(d  public final Object  execute() throws Exception {
`0Q?6l Uy\`  Transaction tx =  HibernateUtil.getCurrentSession().beginTransaction();软件测试技术门户6R eeR4p1PW^8\
  try {软件测试技术门户*o8\4sldmqP g"Y
  Object r =  doInTransaction();
$u.{KRG1z$Y&u.H  tx.commit();软件测试技术门户8Mfo*^vgH
  return r;软件测试技术门户 Sp x*U(K;Q'L
  }
4Yn4Y*f8Le  catch(Exception e) {
+_gK#k*S X  tx.rollback();软件测试技术门户YXL7V9Tzg9B
  throw e;
|h1?9p:is^1U0n;T;zT  }软件测试技术门户%I3?2I(O?"?h
  }软件测试技术门户-p9z.[5q2h
  // 模板方法: 软件测试技术门户I] B#in-|6a
  protected abstract Object  doInTransaction() throws Exception;软件测试技术门户 v3D"QV B ]-E
  }

o7U!aD6w'`    其原理是使用JDK提供的动态代理。由于JDK的动态代理只能对接口代理,因此,要求DAO组件必须实现接口。如果只有具体的实现类,则只能考虑CGLIB之类的第三方库,在此我们不作更多讨论。

/O6r'{+H.U+V;j"g S-M 软件测试技术门户!m![+a.X8c!_U

    下面我们需要编写DatabaseFixture,负责启动HSQLDB数据库,并在@Before方法中初始化数据库表。该DatabaseFixture可以在所有的DAO组件的单元测试类中复用:

1XLI,m