【问题标题】:java.lang.NoSuchMethodError when running integration test运行集成测试时出现 java.lang.NoSuchMethodError
【发布时间】:2020-03-14 04:17:50
【问题描述】:

我有一个非常基本的简单配置,如下所示

    --- clip ---

    compile group: 'org.jboss.arquillian', name: 'arquillian-bom', version: '1.4.0.Final', ext: 'pom'
    testCompile group: 'org.jboss.arquillian.junit', name: 'arquillian-junit-container', version: '1.4.0.Final'
    testCompile group: 'org.jboss.arquillian.container', name: 'arquillian-weld-ee-embedded-1.1', version: '1.0.0.Final'
    testCompile 'org.jboss.weld:weld-core:2.4.5.Final'

    testCompile group: 'junit', name: 'junit', version: '4.11'
--- end clip ---

这是我的测试课

    @RunWith(Arquillian.class)
public class TooltipGeneratorTest {

    @Deployment
    public static JavaArchive createDeployment() {
        return ShrinkWrap.create(JavaArchive.class)
                .addClass(XXXX.class)
                .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
    }


    @Test
    public void testStart() {
        System.out.print("gamma");
        assert true;
    }

如您所见,我什至没有在里面注入 bean。我无法在weld-ee 容器中运行基本的arquillian 测试。

我在运行时遇到的错误

gradle clean test

是

<failure message="java.lang.NoSuchMethodError: org.junit.runners.model.TestClass.getAnnotatedFields()Ljava/util/List;" type="java.lang.NoSuchMethodError">java.lang.NoSuchMethodError: 

是否缺少任何依赖项? 正如tutorial 中提到的,我拥有所有需要的依赖项

  1. Arquillian JUnit 集成
  2. 目标容器的 Arquillian 容器适配器
  3. 容器运行时(用于嵌入式容器)

提前致谢

【问题讨论】:

    标签: testing gradle cdi jboss-arquillian


    【解决方案1】:

    java.lang.NoSuchMethodError: org.junit.runners.model.TestClass.getAnnotatedFields()Ljava/util/List;

    和

    testCompile 组:'junit',名称:'junit',版本:'4.11'


    List&lt;FrameworkField&gt; TestClass.getAnnotatedFields 方法确实存在于 JUnit 4 中,但 Arquillian 正在寻找的带有 no arguments 的特定版本仅在 JUnit 4.12 中添加。

    【讨论】:

      【解决方案2】:

      经过数小时的搜索,我找到了解决方案:

      上下文 导入时,arquillian 与 maven 完美配合

      <dependency>
              <groupId>org.jboss.arquillian</groupId>
              <artifactId>arquillian-bom</artifactId>
              <version>1.4.0.Final</version>
              <scope>import</scope>
              <type>pom</type>
          </dependency>
      

      问题 写作

      compile group: 'org.jboss.arquillian', name: 'arquillian-bom', version: '1.4.0.Final', ext: 'pom'
      

      不会替换它,因为 gradle 不使用范围导入导入 pom 工件

      解决方案 幸运的是,gradle 新版本 4.6 及更高版本支持此功能。所以

      1. 使用 gradle 4.6 及更高版本
      2. 将此添加到 gradle.settings(用于 bom 支持)

        enableFeaturePreview('IMPROVED_POM_SUPPORT')

      完整解决方案

      repositories {
          mavenLocal()
          maven { url "http://repo.maven.apache.org/maven2" }
      }
      dependencies {
      //    compileOnly 'javax:javaee-api:7.0'
          testCompile 'org.jboss.weld:weld-core:2.4.5.Final'
      
      
          // this is the BOM
          testCompile 'org.jboss.arquillian:arquillian-bom:1.4.0.Final'
          testCompile 'org.jboss.arquillian.junit:arquillian-junit-container:1.4.0.Final'
          testCompile group: 'org.arquillian.container', name: 'arquillian-container-chameleon', version: '1.0.0.CR2'
      
          testCompile 'junit:junit:4.12'
      

      及以下

      src/test/resources/

      文件 arquillian.xml

      <?xml version="1.0" encoding="UTF-8"?>
      <arquillian xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xmlns="http://jboss.org/schema/arquillian"
                  xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd">
      
          <container qualifier="wildfly" default="true">
              <configuration>
                  <property name="chameleonTarget">wildfly:11.0.0.Final:managed</property>
              </configuration>
          </container>
      </arquillian>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-07-16
        • 1970-01-01
        • 2019-05-30
        • 2017-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多