[英]DbUnit how to guard against multiple tests running at the same time?
我正在一个项目的测试环境中工作,并且正在考虑使用DbUnit.NET进行很多数据库交互测试。 我确实有一个很大的问题:
我们正在与Oracle对抗,并且为每个开发人员设置一个单独的测试数据库实例确实是不可行的(特别是因为我们只有1个已经被时间束缚的DBA)。 这意味着所有开发人员和Continuous Integration服务器都需要使用相同的数据库架构。
因此,提出一个问题:是否有一个好的方法可以防止一个以上的人同时进行测试? 在db表中放置一条表明正在运行测试的记录,然后在测试完成后将其删除很容易,但是NUnit无法在测试会话的开始和结束时运行任何记录。
还有其他想法吗? 看来这应该是一个非常普遍的问题……还是每个人都为每个可能运行测试的开发人员/测试人员实际运行单独的数据库实例吗?
您可以使用[TestFixtureSetUp]属性来注入您的标志,该标志指示测试正在运行,作为模拟“真实”信号量的一种方式。
当我们在共享数据库上为一群开发人员运行数据库测试时,我们使用了具有单个记录的虚拟表作为锁定令牌。 实际上,我们实际上为每个测试用例都获取了锁,这样,想要运行一个测试用例的开发人员就不必等待运行整个套件的另一个开发人员完成。 我们使每个测试设置了自己的数据-测试方法之间没有保留。
我们使用数据库锁定机制将测试实际排队,而不是在其他人已经在运行测试时使测试失败。 我认为Oracle的锁定算法有些不同,因此我不知道该如何工作。
我们唯一遇到麻烦的地方是开发人员想要在调试模式下逐步进行测试。 这将阻止任何其他想要运行测试的开发人员,直到他发布调试器。 我们将当前用户的名字写到一个虚拟表中,并让锁定机制在被阻止超过30秒时打印一条消息:“ Bob当前正在运行测试,并且已经运行了5分钟。”
可以,但是要维护很多工作。 我们试图使数据库测试的数量保持较小,并且将大多数测试作为内存中的纯单元测试进行。
我在一个与此类似的问题中所做的事情:
该程序具有一个配置变量,该变量已添加到所有相关项目的前面。 每个电台都有自己的设置,正确设置不会有冲突。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.