“我该怎么做?”;慢下来”;在scala中执行测试(例如,Transaction不会关闭)?

“我该怎么做?”;慢下来”;在scala中执行测试(例如,Transaction不会关闭)?,scala,junit,transactions,specs2,Scala,Junit,Transactions,Specs2,将specs/specs2升级到最新的specs2稳定版本后,我在scala测试中发现了一个非常奇怪的问题。在我的“main”类(我所有的测试类都扩展了这个类)中,我有之前的和之后的 abstract class BaseSpec2 extends SpecificationWithJUnit with BeforeExample with AfterExample { def before = startSqlTransaction def after = rollbackSqlTr

将specs/specs2升级到最新的specs2稳定版本后,我在scala测试中发现了一个非常奇怪的问题。在我的“main”类(我所有的测试类都扩展了这个类)中,我有
之前的
之后的

abstract class BaseSpec2 extends SpecificationWithJUnit with BeforeExample with AfterExample {

  def before = startSqlTransaction
  def after = rollbackSqlTransaction

[...]
}
开始交易之前和
结束交易之后(我认为我不必用代码向您展示它是如何工作的,如果我错了,请让我知道)

我在Eclipse中使用JUnit在scala中执行测试

当我运行它们时,我在其中的一些测试中得到了SqlError(测试结果不稳定,我的意思是有时一个测试会成功,有时当这个测试没有错误时,另一个测试会成功):

尝试获取锁时发现死锁;尝试重新启动事务

我认为这个错误会出现,因为
before
在每次测试之前启动事务,但是
before
由于某种原因没有关闭它。我调试了
rollbackSqlTransaction
startsqltransation
,结果显示: -当我启动例如5个测试时,事务打开5次,但只关闭一次

当我添加了空的
step
beetwen这5个测试时,一切都正常

当我有5个以上的测试时,它会变得更奇怪,例如事务开始4次,然后关闭,然后开始,然后关闭等。在40个测试中,它打开40次,关闭29次(它也不稳定)

在我看来,由于某些原因,测试运行得如此之快,以至于executer无法关闭事务,但我可能错了。有没有人认为我可以输入代码来降低他们的速度?还是我做错了,做了别的错事? 此外,当我运行测试时,似乎很少有测试同时启动(它们不是一个接一个地进行),但这可能只是eclipse中的一个集成。
谢谢你的回答,也很抱歉我的英语不好。

我认为交易没有正常结束,因为示例正在同时执行。只需在规范的开头添加
sequential
,一切都会好起来。

您使用的是“共享”事务吗?在这种情况下,您可能会看到并发执行示例的效果。您可以通过在您的规范中添加
sequential
来解决这个问题。如果“shared”的意思是我想在几个测试中使用一个事务,那么您是错的,但正如我所说的,出于某种原因,我认为
after
并没有在每个测试后关闭事务,所以他们可能在共享事务(或者我错了,因为最新的规范2触发了concurent execute)。也就是说,
sequential
帮助我,因为它现在可以正常工作了(现在它们一个接一个地工作,可能已经解决了这个问题)。谢谢!;)很高兴知道它现在可以工作了。我添加了一个“官方”答案,这样你就可以结束这个问题了。