Oracle DB测试策略

时间:2011-04-21 14:41:29

标签: java database hibernate spring testing

在工作中,我们正在尝试简化使用Spring Remoting过度使用编码的应用程序。这就是它今天的工作方式:

(控制器)Spring MVC - > Spring Remoting - >休眠

一切都部署在一台机器上,不需要Spring Remoting(从不需要),并增加了代码维护的复杂性。我们想要它。

如何确保我们的更改后一切正常?今天我们有0%的代码覆盖率!我们考虑过为控制器创建集成测试,因此当我们删除Spring Remoting时,它们的行为应完全相同。我们考虑将Spring Test框架与DBUnit结合使用,以便在每个测试周期将Oracle升级到已知状态。

有没有人尝试过类似的解决方案?有什么缺点?你会建议更好的选择吗?

2 个答案:

答案 0 :(得分:2)

它总是取决于您愿意承担的比例努力/利益。如果你非常勤奋和彻底,你可以得到几乎100%的代码覆盖率。但这也可能过度,特别是在维护这些测试时。但你的想法很好。在使用中型应用程序之前,我已经做了几次这样的事情。这是你应该做的:

  1. 确保您在测试套件中的每个测试开始时都在数据库中拥有一个众所周知的测试数据集(您自己提到过)
  2. 由于您正在使用Hibernate,因此您也可以尝试使用HSQLDB替代Oracle。这样,您的测试运行速度会快得多。
  3. 创建大量独立的小测试用例,涵盖大多数最重要值的功能。你总是可以让自己在应用程序的一些偏远和不重要的角落里有一些小错误。
  4. 确保这些测试用例都在重构之前运行
  5. 确保您有一个不会被重构触及的参考系统,以便能够添加新的测试用例,以防您以后再想到某些内容
  6. 开始重构,并且在重构时运行可能被当前重构步骤打破的所有相关测试。使用jenkins
  7. 等工具每晚运行一次完整的测试套件

    那应该有用。如果您的应用程序是Web应用程序,那么我只能推荐selenium。它有一个很好的jenkins集成,您可以通过在浏览器中单击您的应用程序来创建数百个测试用例(记录这些点击并生成Java / Groovy /其他语言测试脚本)。

答案 1 :(得分:0)

在我们的Spring MVC / Hibernate(使用v3.4)Web应用程序中,我们使用Oracle数据库进行集成测试。

为了确保每次运行测试套件时我们的数据库都处于已知状态,我们在测试套件的persistence.xml中设置以下属性:

<property name="hibernate.hbm2ddl.auto" value="create"/>

这确保了每次基于我们类中的Hibernate注释运行测试时都会创建db模式。要使用已知数据集填充数据库,我们使用相应的SQL插入将名为 import.sql 的文件添加到我们的类路径中。如果您具有上述属性集,则Hibernate将在创建架构后在您的数据库上运行 import.sql 中的语句。