Arquillian + mvn clean包而不是mvn clean包-DskipTests和mvn测试

时间:2017-03-12 14:50:23

标签: junit jboss-arquillian payara

我正在学习Arquillian,我有一个问题。

我的测试仅在开始时使用mvn clean package -DskipTests生成战争然后使用mvn test命令执行测试时才有效。

如果我执行mvn clean package,那么我会得到一个异常并且我的测试没有执行:

java.lang.RuntimeException: Could not invoke deployment method: public static org.jboss.shrinkwrap.api.spec.WebArchive a.b.c.HelloBeanTest.createDeployment()
    at a.b.c.HelloBeanTest.createDeployment(HelloBeanTest.java:32)

如果我能在不首先生成最终工件的情况下直接执行我的测试,那就太棒了。

这是我的测试类:

@RunWith(Arquillian.class)
public class HelloBeanTest {
    @EJB
    private HelloBean bean;

    @Deployment
    public static WebArchive createDeployment() {
        WebArchive war = ShrinkWrap.createFromZipFile(
                WebArchive.class, new File("target/arquillian-demo-web-1.0.war")
        );

        System.out.println(war.toString(true));
        return war;
    }

    @Test
    public void testSay() throws Exception {
        assertNotNull(bean);
        System.out.println(bean.say());
        System.out.println("- end -");
    }

}

我试过了,但它对我不起作用:

war = ShrinkWrap.create(MavenImporter.class).loadPomFromFile("pom.xml").importBuildOutput().as(WebArchive.class);

1 个答案:

答案 0 :(得分:0)

Arquillian提供了一种更好的方式来做你想要的。最佳做法是使用ShrinkWrap maven导入器来构建和打包应用程序而不是maven。

但在此之前,请三思而后行,是否确实要测试整个应用程序(在集成或系统测试中),或者您想要对应用程序的较小部件或较大组件进行单元测试。最佳实践是始终只打包运行测试所需的整个应用程序的最小子集(仅此时更容易理解测试测试的内容并且运行得更快)。

如果你真的想在一个测试用例中测试整个应用程序,那么我上面提到的ShrinkWrap maven importer应该会有所帮助:

WebArchive war = ShrinkWrap.create(MavenImporter.class) 
    .loadPomFromFile("pom.xml").importBuildOutput().as(WebArchive.class);