Arquillian 中的条件部署

Conditional Deployment in Arquillian

查看 Arquillian 文档,我知道我可以使用 @ArquillianSuiteDeployment 和 @Deployment 注释将我想要的 jars/wars 部署到容器。示例:

@ArquillianSuiteDeployment
public class MyDeployer {

    @Deployment(name = "myapp", order = 1, testable = false)
    public static Archive<?> myDeploymentJar() {
        final File file = Maven.configureResolver().fromFile(System.getProperty("settings.xml"))
            .loadPomFromFile("pom.xml").resolve("com.myapp:test-app").withoutTransitivity()
            .asSingleFile();
        final JavaArchive jar = ShrinkWrap.createFromZipFile(JavaArchive.class, file);
        final JavaArchive archive = ShrinkWrap.create(JavaArchive.class, "test-app.jar").merge(jar);
        return archive;
    }
}

让我们推断我还有两个我想部署的 jar,但在同一个测试中永远不会在一起,JAR-A 和 JAR-C。

@Test
@RunAsClient
public void testOne() {
    // deploy JAR-A before all others, but do not deploy JAR-C
}

@Test
@RunAsClient
public void testTwo() {
    // deploy JAR-C before all others, but do not deploy JAR-A
}

是否可以引入与我的测试一起进行的条件@Deployment?

这是一个有趣的用例。

部署发生在测试执行之前,因此目前无法仅通过使用注释来实现它。

但是,您可以使用 Deployer 服务以编程方式控制部署。

@Deployment(name = "JAR-C", managed = false)
public static WebArchive create() {
  return ShrinkWrap.create(JavaArchive.class);
}

@ArquillianResource
private Deployer deployer;

@Test
public void should_work() {
  deployer.deploy("JAR-C");
  // test
  deploy.undeploy("JAR-C");
}

重要的事实是您必须指示 Arquillian 不为您管理此部署,这就是 managed = false 标志在 @Deployment(name = "X", managed = false).

中的作用

希望对您有所帮助。