扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:佚名 来源:天极网 2007年10月13日
关键字:
在本页阅读全文(共2页)
public void testGetEligiblePositions() throws Exception { Player player = new Player("playerId"); TestSchema.addPlayer(player); FieldingStint stint1 = new FieldingStint("playerId", 2004, "SEA", Position.CATCHER); stint1.setGames(20); TestSchema.addFieldingStint(stint1); Set<Position> positions = player.getEligiblePositions(2004); assertEquals(1, positions.size()); assertTrue(positions.contains(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()); transaction.commit(); } finally { session.close(); } }
在单元测试中最重要的就是要保持测试实例是独立的。因为该方法仍然涉及数据库,所以需要一种方法在每个测试实例之前清理数据库。在我的数据库架构中有四个表,所以我在TestSchemaz上编写了reset()方法,该方法从使用JDBC的表中删除所有行。注意,因为HSQLDB能识别外键,删除表的顺序是很重要的,下面是代码:
public static void reset() throws SchemaException { Session session = HibernateUtil.getSession(); try { Connection connection = session.connection(); 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"); connection.commit(); } 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 3.0中进行大量删除操作时,应该能从应用程序中删除直接JDBC的最后一位。到此时为止,必须获取数据库连接并向数据库直接提交SQL。 在确保没有关闭连接的情况下,为了释放资源,只关闭会话就足够了。出于手工编写许多JCBC代码来进行开发的习惯,第一个版本关闭了JDBC连接。因为通过配置Hibernate创建的连接池只带有一个链接,在第一个之后就完全破坏了测试。一定要注意这种情况! 既然在测试类运行时(设想运行所有的测试实例)不能确定数据库的状态,应该在setUp()方法中包含数据库清除,如下所示:
public void setUp() throws Exception { TestSchema.reset(); }结束语
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者