我在集成测试中有一个非常特殊的情况。可以在集成测试中打到数据库吗?
我正在开发一个由少量使用spring引导的微服务组成的Rest API。这些服务中的一些基本上具有crud操作,可以由UI应用程序访问或用于内部验证/查询。
所有的数据库操作都是通过遗留库(无jpa)的过程完成的,我使用的是非标准数据库。我知道好的做法说不使用真正的数据库,但在这种情况下,我无法想象如何在测试时间内使用虚拟数据库(如dbunit或h2)。这样:
1 - 可以在集成测试中打真正的数据库吗?
如果1是确定的,我还有一个问题:
通常情况下,我们不改变单位/集成测试的数据状态;并且测试应该是彼此独立的。
但是,在我的情况下,我只知道post方法的响应中的实体id是什么,使得难以实现get/put/delete方法。当然,在get/put/delete方法中,我可以先插入然后再进行另一个操作,但从这个角度来看,最后,我将在测试开始时的一个不同状态的数据库中。这样,我的另一个问题是:
2 - 如何在测试之前将数据库恢复到相同状态?
我知道它可能是一个特定的情况,但我真的很感谢任何帮助,找到一个优雅的方式来测试这种情况。
在此先感谢。
集成测试*将*打到真正的数据库 - 因为它是*集成*测试。播种数据库的方法很多,例如DbUnit,但还有其他的方法。 –
只需带数据的数据库副本,并在完成集成测试后,使用它 –
您是否想使用实时数据?在运行测试时,其他人可以访问数据吗?如果您修改数据库并且其他人可能正在访问您的测试数据并认为它是真实数据,那么可能会导致哪些问题? – ajb