知识大全 利用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对象进行单元测试 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 出了什么问题?&nb
运用DBUnit进行高效的单元测试 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 现实系统中通常
进行Struts应用程序单元测试开发 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一引言 测
用WatiN对ASP.NET页面进行单元测试 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 单元
使用JUnit对EJB进行单元测试[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
使用JUnit对EJB进行单元测试[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
使用JUnit对EJB进行单元测试[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 怎样使用Junit Framework进行单元测试的编写
怎样使用JunitFramework进行单元测试的编写 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
知识大全 通过Spring2.5对单元测试的Annotation支持进行TDD开发
通过Spring2.5对单元测试的Annotation支持进行TDD开发 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们