我想我们应该明确单元测试的定义。单元测试只能在应用程序中测试一个小单元(一种公共方法)。
假设您有一个使用Hibernate与数据库进行交互的DAO层。现在Hibernate使用需要数据源的SessionFactory。单元测试的数据源不应该与您的生产应用程序的数据源相同。
这个想法是定义一个测试数据源,并使用内存数据库(hsqldb或任何其他)。对于每个测试用例,您都可以使用测试数据源对内存数据库执行一些查询,并在执行单元测试后清除它。对于每个单元测试,您应该执行查询,以便为特定测试完成测试数据设置。
对于例如:如果你想测试如下: 1)创建帐户 2)更新帐户 3)删除帐户
然后有三个测试场景,并可以有蜂多个单元测试可以为每个的情况。
现在在执行创建帐户测试之前,重要的是数据库没有此帐户。然后调用DAO中的createAccount方法来测试它。无需验证结果是否在数据库中。只需检查您的方法的返回,并且如果它与创建成功的帐户时的预期相同,那么您的测试用例应该通过。
对于更新帐户,您的设置方法应该通过查询插入一个帐户,然后您必须在此帐户ID中调用DAO中的updateAccount等。
请坚持单元测试的定义,不要一次性使用它来测试多个功能。
希望这会有所帮助。
首先感谢您的答案,我不确定我的问题的哪一部分给人的印象是我使用单元测试来获得更多的功能,但我向你保证事实并非如此。我的意思是我已经有很多已经写好的单元测试,我正试图找到一种方法来修改它们,所以它们不会损害数据。 我也需要这样的集成测试,对于某些测试,我更愿意使用我现有的数据而不是使用空白内存数据库并自行填充,这就是为什么我要求使用我的原始数据库和恢复的方法它。 – Shperb