2009-04-15 72 views
3

我有一个简单的CRUD操作,需要进行单元测试。 这些测试用例是针对DAO层的 - 所以所有的测试都是针对数据库的,因此不能被模拟。JUnit测试用例 - 设置数据

所以我有一个测试用例用于创建另一个用于更新,另一个用于读取。

  1. 我应该硬编码JUnit类中的数据还是将其外化?

  2. Read TestCase显然需要数据库中的数据。我应该依赖创建测试用例来设置数据还是使用SQL语句?

这是什么最佳实践?

如果你可以指向我讨论这个问题的互联网资源 - 那将是很棒的。

回答

5

Spring has excellent support for this sort of thing - 您希望针对“测试”数据库运行的单元测试,可以在每个单元测试中重新创建脚本。

最后一句的后半部分是开发可重用和可扩展的单元测试的关键 - 对数据库的单元测试不应该被迫依赖乐观的数据处于特定状态或依赖于以前的单元测试首先运行 - 您需要为每个单元测试重新创建数据库,以便每个测试用例都获得“干净”版本的数据。

设置Spring MVC的分步教程实际上是has a section on setting up unit tests for database classes,我认为这将是一个有价值的参考,即使您不使用Spring MVC - 您可以将其用作如何设置测试的参考数据库从构建脚本创建/初始化,使用Spring容器重新加载每次测试运行的数据等。

2

我推荐使用DBUnit。允许您使用文件将数据库设置为已知状态,并与预期的结果功能进行很好的比较。入门指南是here

最好不要将任何提交作为测试用例的一部分来执行,然后可以在tearDown()上回滚。