当前位置: 首页 > 知识库问答 >
问题:

与gradle集成测试

杜俊风
2023-03-14
[jettyRun, jettyStop]*.stopPort = 8006
[jettyRun,jettyStop]*.stopKey = 'STOP'
jettyRun {
   classpath=configurations.compile
}

task integrationTest(type: Test, dependsOn: "test" ) {
include '**/*ITCase*.*'
println 'Starting the embedded jetty'
doFirst {
    jettyRun.daemon = true
    jettyRun.scanIntervalSeconds = 0
    jettyRun.execute()
}
doLast {
    jettyStop.execute()
    println 'Stopping the embedded jetty'
}

当我运行命令gradle war integrationTest时,集成测试失败,因为它在服务项目中找不到上下文侦听器。错误消息的片段如下:

:services:integrationTest (Thread[Daemon Thread 14,5,main]) started.
:services:integrationTest
Executing task ':services:integrationTest' (up-to-date check took 0.026 secs) due to:
  No history is available.
Starting the embedded jetty
Executing task ':services:jettyRun' (up-to-date check took 0.0 secs) due to:
  Task has not declared any outputs.
Configuring Jetty for project ':services'
Webapp source directory = E:\Workspace\project\services\src\main\webapp
Reload Mechanic: automatic
web.xml file = E:\Workspace\project\services\src\main\webapp\WEB-INF\web.xml
Context path = /services
Tmp directory =  determined at runtime
Web defaults = org/mortbay/jetty/webapp/webdefault.xml
Web overrides =  none
Webapp directory = E:\Workspace\project\services\src\main\webapp
Starting jetty 6.1.25 ...
jetty-6.1.25
Could not instantiate listener com.db.project.services.ProjectServletContextListener
java.lang.ClassNotFoundException: com.db.project.services.ProjectServletContextListener
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:401)
    at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:363)
    at org.mortbay.jetty.handler.ContextHandler.loadClass(ContextHandler.java:1101)
    at org.mortbay.jetty.webapp.WebXmlConfiguration.initListener(WebXmlConfiguration.java:630)
    at org.mortbay.jetty.webapp.WebXmlConfiguration.initWebXmlElement(WebXmlConfiguration.java:368)
    at org.mortbay.jetty.plus.webapp.AbstractConfiguration.initWebXmlElement(AbstractConfiguration.java:190)
    at org.mortbay.jetty.webapp.WebXmlConfiguration.initialize(WebXmlConfiguration.java:289)

对此我们非常感谢您的帮助。提前致谢

共有1个答案

龚镜
2023-03-14

我认为错误消息的根本原因是,jetty任务的类路径不包含项目的生产代码,而只包含其编译类路径。要使其正常工作,从代码段中删除类路径配置就可以了。jetty插件已经为您做了这件事。

另一个注意事项:通常,通过运行'task.execute'来执行任务被认为是糟糕的做法。相反,您应该使用task#dependson和task#finalizedby。想象一下你的一个测试失败了。那么doLast块将永远不会执行,而您的jetty将永远不会停止。

干杯,蕾妮

 类似资料:
  • 我正在使用这篇博文为Spring Boot项目配置集成测试,但我仍然停留在声明源集上。我也在StackOverflow上找到了这篇文章,但我想我已经做得有点远了。 我的项目结构是 另外,IntelliJ不将testIntegration目录识别为Kotlin包。

  • 此文档描述手动埋点SDK gradle配置方式,如果您使用的是无埋点SDK版本,请参考可视化埋点 配置方法 1)配置build.gradle project build.gradle,android studio项目默认已经配置好: allprojects { repositories { mavenCentral() jcenter()

  • 我正在尝试对停靠数据库运行DropWizard的集成测试。 DropWizard 测试容器 我试过的: 我得到由:java.lang.IllegalStateException引起的 将这些链接在一起也不起作用 最后,这是可行的,但据我所知,它在每次测试中都运行新的DropwizardAppRule,这是不好的... 那么,如何将规则链接起来,使PostgreSQLContainer首先启动,并且

  • 问题内容: 我刚开始在我的项目中使用带有Gradle构建工具的Jenkins for CI。 我发现使用Gradle和Jenkins建立了一个持续交付管道,我不明白为什么作者建议“始终使用包装器”的原因。(c)否。120张幻灯片。为什么这比直接参与Gradle更好? 问题答案: 如果使用Gradle包装器,则支持不同版本的Gradle会更容易,并且使其他人更容易开始您的项目。他们可以克隆您的项目,

  • 我试图使用Gradle的标志运行单个集成测试。我添加了另一个源代码集,并将测试放入其中。我有一个集成测试任务 这运行得很好,但是如果我尝试运行一个测试,它会告诉我它找不到匹配的测试。我不想每次编写一个新的集成测试时都必须运行每个集成测试。有办法做到这一点吗?

  • Gradle4.6增加了对JUnit5的支持。 只要我没有用于例如集成测试的另一个sourceset,这对我是有效的:我不知道如何在我的集成测试中启用。 我所能做的是让任务与新的JUnit5支持一起工作,但我的任务使用JUnit5控制台并从命令行运行测试。最后,我在gradle中放弃对JUnit5的支持,并回滚到使用JUnit5控制台进行两个测试。 除了之外,如何在其他任务上启用Gradle4.6