【问题标题】:Unable to run play application using sbt Tests.setup for integration testing无法使用 sbt Tests.setup 运行播放应用程序进行集成测试
【发布时间】:2019-03-07 20:15:13
【问题描述】:

我想在 play.test.TestServer 上运行我的集成测试。所以所有测试都只是向 TestServer 发送 Http 请求并断言 Http 结果。

但是,如果我在 @BeforeClass 方法测试套件中启动 TestServer,运行所有集成测试需要花费大量时间,因为我需要为每个套件启动和停止播放服务器。

所以我决定使用 sbt 的 Tests.Setup 方法启动测试服务器

Tests.Setup(loader=>   
    loader.loadClass("it.PlayTestRunner")
       .getMethod("startup")
       .invoke(null)
)

我可以调用启动方法,但它会抛出异常

Caused by: java.lang.ClassNotFoundException: tyrex.naming.MemoryContextFactory
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:72)
at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:61)
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:672)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313)
at javax.naming.InitialContext.init(InitialContext.java:244)
at javax.naming.InitialContext.<init>(InitialContext.java:216)
at play.api.libs.JNDI$.initialContext$lzycompute(JNDI.scala:40)
at play.api.libs.JNDI$.initialContext(JNDI.scala:22)
at play.api.db.HikariCPConnectionPool$$anonfun$1$$anonfun$apply$2.apply(HikariCPModule.scala:63)

我猜这个问题与类加载 JNDI 对象有关。

你知道解决这个问题的任何想法吗?

【问题讨论】:

  • 请添加您的答案并接受它,因为它解决了您的问题。目前您的问题似乎没有答案。
  • 抱歉,搞定了。谢谢!

标签: playframework sbt integration-testing


【解决方案1】:

好的,我发现了问题。 JNDI 使用线程的上下文类加载器来加载所需的类,但是 sbt 的线程上下文类加载器设置不正确。所以更新如下代码解决了我的问题;

Tests.Setup(loader=>{
    Thread.currentThread().setContextClassLoader(loader) 
    loader.loadClass("it.PlayTestRunner")
       .getMethod("startup")
       .invoke(null)
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    • 2022-08-03
    • 2011-10-30
    • 1970-01-01
    • 2021-10-24
    相关资源
    最近更新 更多