我的同事们的问题。我需要测试一个SQL语句将截断表而不实际截断表。我知道我需要在截断它之前禁用约束,但我不知道如何实际截断表而不会对表造成“永久性损坏”。
很抱歉,如果已经有人问过,请提前致谢!
编辑: 我忘了提,我正在使用Maven,MyBatis,Oracle DB和Spring(Aspect,Batch)。此外,代码可以工作,但在JUnit的上下文中,需要测试该方法。虽然我将如何断言它是另一个我很快需要处理的问题。
答案 0 :(得分:4)
考虑使用内存数据库引擎进行单元测试,例如Derby。这应该允许您在不损坏实际数据的情况下截断表。一种好的方法是使用不同的驱动程序进行生产和测试。如果你使用像Hibernate这样的ORM框架,这种方法特别方便。
答案 1 :(得分:2)
虽然我同意Alexey在内存数据库中很好,但我还建议您在真实数据库上测试代码。但是,就我所知,还没有一种方法可以测试它是否真的有效而没有实际截断表格。
测试数据库的建议。
如果您已完成这些操作,则可以针对您的数据库设置一套非常好的测试,而无需进入生产环境。
我使用类似这样的生产模式对一个真正的postgresql实例编写了许多自动化测试。
<强>更新强>
要启动数据库
使用initdb创建一个包含数据库文件的文件夹 http://www.postgresql.org/docs/9.3/static/app-initdb.html
启动postgres流程并将其指向这些文件http://www.postgresql.org/docs/8.2/static/server-start.html
您可能需要调整postgresql.conf和pg_hba.conf中的安全设置(这也应该是自动化的);