Maven Spring测试在一起运行时失败,但是单独成功(ehcache关闭,IllegalTransactionStateException)

Moj*_*ojo 6 junit spring maven-2 hibernate

我们正在为一个相当大的Web应用程序使用Maven/Surefire和Spring/Hibernate事务测试.有138个Test*类,共运行1178个测试.

一个简单的"mvn测试"将产生82个错误,其性质往往意味着一个腐败的应用程序上下文:

其中许多:
IllegalTransactionStateException:找到预绑定的JDBC连接!

其中一些:
NoSuchMethodError:org.hibernate.cache.CacheException.(Ljava/lang/Exception;)V

对于每个失败的测试,单独运行测试类"mvn test -Dtest = TestFailingClass"成功.实际上,使用-Dtest = TestClass1,TestClass2,Etc."与我所有测试类的各种子集以不同的方式成功或失败.例如,仅运行失败的测试类成功,出现0错误.

由于没有明显的方法来控制Surefire测试的类的顺序,我很难确定哪些测试类似乎将上下文保持在错误的状态.

我正在寻找的是一种帮助确定以某种确定性方式发生的事情的策略.我当然可以看到测试的顺序从日志中运行,但我无法控制地重现该命令.

当然,有关如何应对的建议......

Moj*_*ojo 2

事实上,问题来自于损坏的 Spring 应用程序上下文。早期测试之一是弄脏上下文并导致以下测试出错。

一个困难是在发现导致问题的测试时试图控制测试的顺序。

我能够通过使用 Maven 日志查找测试类运行的顺序,然后从顶部一次排除一个测试来实现这一目标。经过三十四次测试,我找到了罪魁祸首。

这是一个名为 TestSpringContexts 的测试。在这些测试中添加 @DirtiesContext 可以解决这个问题,但也可以通过从测试中删除对 context.close() 的调用来解决这个问题。

我在这里写了一篇关于该过程的博客文章,但这就是问题的要点:http://mojo.whiteoaks.com/2010/04/27/finding-the-test-that-c ​​orrupts-the-suite/

莫乔