Testing 运行集成测试时发生java.lang.NoSuchMethodError

Testing 运行集成测试时发生java.lang.NoSuchMethodError,testing,gradle,cdi,jboss-arquillian,Testing,Gradle,Cdi,Jboss Arquillian,我有一个非常简单的配置,如下所示 --- 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'

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

    --- 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;
    }
如你所见,我甚至没有在里面注射豆子。我无法在weld ee容器中运行基本的arquillian测试

运行时出现的错误

gradle clean test

java.lang.NoSuchMethodError:
是否缺少依赖项? 如中所述,我拥有所有需要的依赖项

  • Arquillian JUnit集成
  • 目标容器的Arquillian容器适配器
  • 容器运行时(对于嵌入式容器)

  • 提前感谢

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

    上下文 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>
    
    不会替换它,因为gradle不会使用范围导入导入pom工件

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

  • 使用gradle 4.6及以上版本
  • 将其添加到gradle.settings(用于bom表支持)

    enableFeaturePreview(“改进的POM支持”)

  • 完整解决方案

    及以下

    src/测试/资源/

    文件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>
    
    
    wildfly:11.0.0.决赛:管理
    
    java.lang.NoSuchMethodError: org.junit.runners.model.TestClass.getAnnotatedFields()Ljava/util/List

    testCompile组:“junit”,名称:“junit”,版本:“4.11”


    JUnit 4中确实存在列出TestClass.getAnnotatedFields的方法,但Arquillian所寻找的特定版本仅在JUnit4.12中添加

    compile group: 'org.jboss.arquillian', name: 'arquillian-bom', version: '1.4.0.Final', ext: 'pom'
    
    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'
    
    <?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>