代码之家  ›  专栏  ›  技术社区  ›  Mojo

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

  •  5
  • Mojo  · 技术社区  · 16 年前

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

    直截了当的 mvn test 将生成82个错误,其性质往往意味着应用程序上下文已损坏:

    其中许多:

    IllegalTransactionStateException: Pre-bound JDBC Connection found!
    

    其中一些:

    NoSuchMethodError: org.hibernate.cache.CacheException.<init>(Ljava/lang/Exception;)V
    

    对于每个失败的测试,单独运行测试类 mvn test -Dtest=TestFailingClass 成功。实际上,使用- Dtest=TestClass1,TestClass2,Etc

    由于没有明显的方法来控制Surefire测试的类的顺序,我很难确定我的测试类中哪一个似乎处于不好的状态。

    3 回复  |  直到 7 年前
        1
  •  2
  •   Mojo    16 年前

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

    一个困难是试图控制测试的顺序,同时发现导致故障的测试。

    我能够通过使用Maven的日志来找到测试类运行的顺序,然后从顶部一次排除一个测试来实现这一点。在34次测试中,我找到了罪魁祸首。

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

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

        2
  •  1
  •   Pascal Thivent    16 年前

    由于没有明显的方法来控制Surefire测试的类的顺序,我很难确定我的测试类中哪一个似乎处于不好的状态。

    但你也许可以用 SUREFIRE-321 ( )为了得到更好的控制(查看评论,其中一张海报面临着与你非常相似的问题)。

        3
  •  1
  •   Renato Back tarun goel    6 年前

    @DirtiesContext(classMode = DitiesContext.ClassMode.AFTER_CLASS) 在每个测试用例中。

    @DirtiesContext org.springframework.test.annotation .