知识大全 利用HSQLDB进行Hibernate的单元测试二

Posted

篇首语:绝大多数人,在绝大多数时候,都只能靠自己。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 利用HSQLDB进行Hibernate的单元测试二相关的知识,希望对你有一定的参考价值。

利用HSQLDB进行Hibernate的单元测试二  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  因为所有代码(经过单元测试的产品级代码)都是从HibernateUtil获取Hibernate会话 所以能在同一个位置对其进行配置 为了对代码的第一位进行单元测试而访问TestSchema类将会激活静态初始化程序 该程序将安装Hibernate并且将测试SessionFactory插入到HibernateUtil中 对于产品级代码 可以使用标准hibernate cfg xml配置机制来初始化 SessionFactory     那么单元测试中的外部特征是什么?下面的测试代码片段是用来检查逻辑的 决定运动员在棒球联盟比赛中是哪个位置的人选     public void testGetEligiblePositions() throws Exception   Player player = new Player( playerId );  TestSchema addPlayer(player);    FieldingStint stint = new FieldingStint  ( playerId SEA Position CATCHER);  stint setGames( );  TestSchema addFieldingStint(stint );    Set<Position> positions = player getEligiblePositions( );  assertEquals( positions size());  assertTrue(ntains(Position CATCHER));      第一次创建新Player实例并通过addPlayer()方法添加到TestSchema中 必须首先完成此步骤 因为FidldStint类和Player类之间有外键关系 如果不首先添加该实例 在设法添加FieldingStint时将会出现外键约束违例     一旦测试上下文就位 就可以测试getEligiblePositions()方法来检索校正数据 下面是在TsetSchema中addPlayer()方法的代码 您将注意到使用Hibernate而不是bare metal JDBC代码     public static void addPlayer(Player player)   if (player getPlayerId() == null)   throw new IllegalArgumentException( No primary key specified );      Session session = HibernateUtil getSession();  Transaction transaction = session beginTransaction();  try   session save(player player getPlayerId());  mit();    finally   session close();        在单元测试中最重要的就是要保持测试实例是独立的 因为该方法仍然涉及数据库 所以需要一种方法在每个测试实例之前清理数据库 在我的数据库架构中有四个表 所以我在TestSchemaz上编写了reset()方法 该方法从使用JDBC的表中删除所有行 注意 因为HSQLDB能识别外键 删除表的顺序是很重要的 下面是代码     public static void reset() throws SchemaException   Session session = HibernateUtil getSession();  try   Connection connection = nnection();  try   Statement statement = connection createStatement();  try   statement executeUpdate( delete from Batting );  statement executeUpdate( delete from Fielding );  statement executeUpdate( delete from Pitching );  statement executeUpdate( delete from Player );  mit();    finally   statement close();      catch (HibernateException e)   connection rollback();  throw new SchemaException(e);    catch (SQLException e)   connection rollback();  throw new SchemaException(e);      catch (SQLException e)   throw new SchemaException(e);    finally   session close();      当确定在Hibernate 中进行大量删除操作时 应该能从应用程序中删除直接JDBC的最后一位 到此时为止 必须获取数据库连接并向数据库直接提交SQL     在确保没有关闭连接的情况下 为了释放资源 只关闭会话就足够了 出于手工编写许多JCBC代码来进行开发的习惯 第一个版本关闭了JDBC连接 因为通过配置Hibernate创建的连接池只带有一个链接 在第一个之后就完全破坏了测试 一定要注意这种情况!    既然在测试类运行时(设想运行所有的测试实例)不能确定数据库的状态 应该在setUp()方法中包含数据库清除 如下所示:    public void setUp() throws Exception   TestSchema reset();       结束语    在使用像Hibernate这种复杂的O/R映射程序时 必须能够测试实际存在(real live)的RDBMS 而不会发生任何针对已部署数据库的争论 虽然Hibernate有内置模式生成工具 让此类测试特别简单 但是在这里展示的例子并不排除Hibernate 并且可能与JDO或TopLink一起运行 使用上面描述的设置 您不必离开舒适的IDE环境 但仍然可以对代码进行大量测试 cha138/Article/program/Java/ky/201311/28343

相关参考

知识大全 Spring+Hibernate的单元测试JUnit

Spring+Hibernate的单元测试JUnit  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 使用MOCK对象进行单元测试

使用MOCK对象进行单元测试  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  出了什么问题?&nb

知识大全 运用 DBUnit 进行高效的单元测试

运用DBUnit进行高效的单元测试  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  现实系统中通常

知识大全 进行Struts应用程序单元测试开发

进行Struts应用程序单元测试开发  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一引言  测

知识大全 用WatiN对ASP.NET页面进行单元测试

用WatiN对ASP.NET页面进行单元测试  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  单元

知识大全 使用JUnit对EJB进行单元测试[3]

使用JUnit对EJB进行单元测试[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 使用JUnit对EJB进行单元测试[2]

使用JUnit对EJB进行单元测试[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 使用JUnit对EJB进行单元测试[1]

使用JUnit对EJB进行单元测试[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 怎样使用Junit Framework进行单元测试的编写

怎样使用JunitFramework进行单元测试的编写  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 通过Spring2.5对单元测试的Annotation支持进行TDD开发

通过Spring2.5对单元测试的Annotation支持进行TDD开发  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们