我正在学习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);
答案 0 :(得分:0)
Arquillian提供了一种更好的方式来做你想要的。最佳做法是使用ShrinkWrap maven导入器来构建和打包应用程序而不是maven。
但在此之前,请三思而后行,是否确实要测试整个应用程序(在集成或系统测试中),或者您想要对应用程序的较小部件或较大组件进行单元测试。最佳实践是始终只打包运行测试所需的整个应用程序的最小子集(仅此时更容易理解测试测试的内容并且运行得更快)。
如果你真的想在一个测试用例中测试整个应用程序,那么我上面提到的ShrinkWrap maven importer应该会有所帮助:
WebArchive war = ShrinkWrap.create(MavenImporter.class)
.loadPomFromFile("pom.xml").importBuildOutput().as(WebArchive.class);