在运行集成测试时,如何保持数据库的整洁?
1、Spring集成测试功能对于处理数据库和事务有一个非常有用的特性。如果您有一个扩展的JUnit测试套件AbstractTransactionalJU荏鱿胫协nit4SpringContextTests,然后在此套件中运行的每个测试都将在数据库事务中运行,并在每个测试结束时回滚。
2、这可以检查代码是否满足数据库指定的任何需求,比如引用完整性,或者复杂的连锁反应,比如数据库触发器中指定的连锁反应。
3、先看spring的application.xml配置文件信息:
4、下图显示了一个将数据插入数据库的测试。如果要插入的任何用户名的先决条件已经在数据库中,则测试将失败。
5、在运行任何@Before方法之前,都会打开一个事务。一旦运行了测试,并且所有@After方法都完成了,事务就会回滚,就好像数据从来没有存在过一样。当然,您需要确保@Test方法中的任何代码都没有执行提交。
6、如果这个测试在事务之外运行,由于插入了用户名Alice、Bob和Charlie,它在第二次运行时会失败。但是因为插入是回滚的,所以可以一次又一次地运行它,而不需要担心数据的持久性。这使得它适合作为常规应用程序构建的一部分运行,或者作为在连续交付服务器上运行的一组集成测试的一部分运行。
7、JUnit 4.11引入了@FixMethodOrder注释,它允许您定义运行@Test方法的顺序。在清单16-18中,您可以编写另一个测试,再次检查事务是否确实已回滚,并且用户是否不存在于表中,并在runInTransaction测试之后运行该测试。
8、指定测试的顺序是不好的实践,因为您应该能够独立地运行每个测试。如果这个测试是在一个连续交付服务器上运行的,并且事务回滚有问题,那么这个测试将在第二次运行时失败,如果您有一个常规运行的构建,那么这将是在开发周期的早期。
9、通过扩展AbstractTransactionalJUnit4SpringContextTests,并提供一个带有有效数据源的刂茗岚羟应用程序上下文,集成测试套件允许您访问SimpleJdbcTemplate对象,您可以使用该对象为您的测试执行任何相关的数据库操作。测试套件还提供了两个实用方法:countRowsInTable和deleteFromTables。