【问题标题】:Arquillian EJB adding mockitoArquillian EJB 添加 mockito
【发布时间】:2016-04-15 20:11:42
【问题描述】:

我正在尝试将 mockito 添加到我的 arquillian 测试中(使用 ShrinkWrap),如下所示:

    @Deployment
    public static Archive<?> createDeployment() {
        JavaArchive archive = ShrinkWrap.create(JavaArchive.class, "test.jar")
                .addPackage(BeanClass.class.getPackage())
                .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml")
                ;

        Archive[] libs = Maven.resolver()
                .loadPomFromFile("pom.xml")
                .resolve(
                        "org.mockito:mockito-all"
                )
                .withTransitivity()
                .as(JavaArchive.class);

        for (Archive lib : libs) {
            archive = archive.merge(lib);
        }

        return archive;
    }

我正在使用 Mockito 覆盖 @Alternative。但是当我添加archive = archive.merge(lib) 行时,我得到了异常:

引起:java.lang.ClassNotFoundException: org.apache.tools.ant.Task

否则我会得到

引起:java.lang.ClassNotFoundException: org.mockito.asm.signature.SignatureVisitor

其他人也经历过这种情况吗?

更新: 一些额外的信息,我正在尝试使用 wildfly 嵌入式容器进行测试:pom.xml

<dependencies>
                <dependency>
                    <groupId>org.wildfly</groupId>
                    <artifactId>wildfly-arquillian-container-embedded</artifactId>
                    <scope>test</scope>
                </dependency>

                <dependency>
                    <groupId>org.wildfly</groupId>
                    <artifactId>wildfly-embedded</artifactId>
                    <scope>test</scope>
                </dependency>

                <dependency>
                    <groupId>org.jboss.arquillian.extension</groupId>
                    <artifactId>arquillian-transaction-jta</artifactId>
                    <scope>test</scope>
                </dependency>
            </dependencies>

【问题讨论】:

    标签: java mockito jboss-arquillian shrinkwrap


    【解决方案1】:

    我终于找到了我需要的解决方案。我通过包含 ant 依赖找到了解决方案。当我需要使用 Cucumber 等其他测试库时,问题就开始了。 我现在正在使用已解决我的问题的 EAR 部署进行测试:

        @Deployment
        public static Archive<?> createDeployment() {
            final JavaArchive ejbJar = ShrinkWrap
                    .create(JavaArchive.class, "ejb-jar.jar")
                    .addClass(NewSessionBean.class)
                    .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
    
            final WebArchive testWar = ShrinkWrap.create(WebArchive.class, "test.war")
                    .addClass(NewSessionBeanTest.class)
                    .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml")
    
                    ;
    
            Archive[] libsArchives = Maven.resolver()
                    .loadPomFromFile("pom.xml")
                    .resolve("org.mockito:mockito-all")
                    .withTransitivity()
                    .as(JavaArchive.class);
    
            testWar.addAsLibraries(libsArchives);
            final EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class)
                    .setApplicationXML("META-INF/test-application.xml")
                    .addAsModule(ejbJar)
                    .addAsModule(testWar);
    
            return ear;
        }
    

    还有我的test-application.xml

    <application>
        <display-name>ear</display-name>
        <module>
            <ejb>ejb-jar.jar</ejb>
        </module>
        <module>
            <web>
                <web-uri>test.war</web-uri>
                <context-root>/test</context-root>
            </web>
        </module>
    </application>
    

    【讨论】:

      【解决方案2】:

      您不能将 Mockito 与静态或决赛一起使用。

      您需要使用 PowerMock 来执行此操作。

      【讨论】:

      • 问题是,我将它与wildfly-embedded一起使用。所以我需要将这些类包含在我的@Deployment 中,但我不断收到错误消息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-27
      • 2014-08-09
      • 2016-12-17
      • 2014-09-22
      相关资源
      最近更新 更多