2017-03-24 1 views
2

En consultant la documentation d'Arquillian, je suis conscient que je peux utiliser les annotations @ArquillianSuiteDeployment et @Deployment pour déployer les jars/wars désirés dans le conteneur. Exemple:Déploiement conditionnel dans Arquillian

@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; 
    } 
} 

Nous allons en déduire que j'ai deux pots que je voudrais déployer, mais jamais ensemble pendant le même test, JAR-A et JAR-C. Est-il possible d'introduire un @Deployment conditionnel qui irait avec mes tests?

Répondre

1

C'est une utilisation intéressante.

Les déploiements ont lieu avant l'exécution des tests, il n'est donc pas possible de le faire en utilisant des annotations.

Vous pouvez toutefois contrôler par programmation les déploiements à l'aide du service 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"); 
} 

fait important est que vous devez instruire Arquillian de gérer non ce déploiement pour vous, c'est ce que managed = false drapeau est dans @Deployment(name = "X", managed = false).

Espérons que cela aide.