-
09-06-2019 - |
题
当你正在做的一体化测试要么只是你的数据访问层或绝大多数应用程序堆。什么是最好的方法防止多次试验,从冲突各方,如果他们运行在相同的数据库?
解决方案
交易。
什么样的红宝石在轨道上单元的测试框架并不是这样的:
Load all fixture data.
For each test:
BEGIN TRANSACTION
# Yield control to user code
ROLLBACK TRANSACTION
End for each
这意味着
- 任何改变了你的测试的数据库,不会影响其他线程,同时它正在进行
- 下一个测试的数据没有污染的现有测试
- 这是关于无数倍于手工重新装载数据用于每一个测试。
我个人认为这是相当酷的
其他提示
为简单的数据库应用程序的我找到使用 源码 非常宝贵的。它可以让你有一个独特和独立的数据库对每一个测试。
然而,它不仅仅工作,如果你使用简单通用的SQL功能或可以轻易地隐藏微小的差别源码和生产数据库系统的落后一类,但我总是发现这是相当容易在SQL applications我的发展。
只是添加到免费羚的答案我还有用 HSQLDB 做一个类似类型的检测其中每个试验得到干净的实例的数据库。
我想接受免费羚羊人和猎户座Edwards的答案,但它将不让我来。我想做到这一点是,我得出的结论是,这些都是两个主要的方式来做到这一点,但是其一种选择取决于个别情况下(主要是大小的数据库)。
也运行试验在不同的时间,以便它们不影响的性能或效力。
虽然不一样聪明的轨单元的测试框架的一个其他的答案在这里,创造了不同的数据每测试或一组试验的另一种方式这样做。水平的沉闷这种解决方案的数量取决于测试情况下你有如何抚养他们是在另一个。这沉闷将举行如果你有一个数据库每测试或集团的受扶养测试。
在运行测试,你负荷的数据开始,运行测试、卸/比较结果制定的实际结果是否满足预期的结果。如果不是,做再次循环。载荷运行房、装卸/比较。
不隶属于 StackOverflow