0

我正在学习 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);
4

1 回答 1

0

Arquillian 提供了一种更好的方式来做你想做的事。最佳实践是使用 ShrinkWrap maven importer 来构建和打包应用程序而不是 maven。

但在这样做之前,请三思您是否真的要测试整个应用程序(在集成或系统测试中),还是要对应用程序的较小部分或较大组件进行单元测试。最佳实践是始终只打包运行测试所需的整个应用程序的最小子集,仅此而已(这样更容易理解测试正在测试什么,并且运行速度也更快)。

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

WebArchive war = ShrinkWrap.create(MavenImporter.class) 
    .loadPomFromFile("pom.xml").importBuildOutput().as(WebArchive.class);
于 2017-03-13T20:19:40.143 回答