Domanda

Il mio WebApp ha una produzione non vuota beans.xml sotto src/main/resources/META-INF. Ora, per i miei test, devo sostituire 1 fagiolo con un'alternativa.

Dove faccio questo test beans.xml Che contiene proprio questo e niente di più?

<?xml version="1.0" encoding="UTF-8"?>
<beans ...>
  <alternatives>
    <class>...MyTestReplacement</class>
  </alternatives>
</beans>

Ho provato sotto src/test/resources/META-INF Ma questo viene ignorato. Sto usando Arquillian e il mio percorso di classe di prova viene aggiunto al shrinkwrap.

È stato utile?

Soluzione 2

Non usare @alternative, ma usa @specialis. Basta mettere il fagiolo @Specializza solo nel percorso della classe di prova e sostituirà automaticamente il fagiolo reale. Non c'è bisogno di scherzare con fagioli.xml.

Altri suggerimenti

Anche se è già accettato, ti pubblichi la soluzione che ho trovato. Avevo lo stesso problema e usare @specializzas non era opzione per me, perché avevo molti bechi con diversi metodi, quindi creare per ognuno una classe era un po 'eccessiva ....

Quindi nel mio test ho una risorsa:

@Produces
@Alternative
public IResource createResource() {
    Resource resource = mock(Resource.class);
    when(resource.getLocalized(anyString())).then(AdditionalAnswers.returnsFirstArg());
    return resource;
}

Con i seguenti shrinkwrap sono stato in grado di caricare quei fagioli @alternative solo durante il test: (Nessun fagiolo.xml nel test Dir necessario!)

return ShrinkWrap
            .create(JavaArchive.class)
            .addPackages(true, "some.package.with.classes")
            .addAsManifestResource(
                    new StringAsset(
                            "<alternatives><class>my.testclass.with.alternatives</class></alternatives>"),
                    "beans.xml");

E questo è tutto.

Oppure, se è necessario utilizzare @alternative, puoi usare un comando shrinkwrap .alternativeClass. Puoi vedere il seguente esempio nel sottoproject di Arquillian-show, CDI-EJB. Includi questa dipendenza nel tuo pom:

    <dependency>
        <groupId>org.jboss.shrinkwrap.descriptors</groupId>
        <artifactId>shrinkwrap-descriptors-impl</artifactId>
        <scope>test</scope>
    </dependency>

Quindi usa questo tipo di @deployment (per glassfish):

    @Deployment
    public static WebArchive createDeploymentForGlassFish() {
    BeansDescriptor beansXml = Descriptors.create(BeansDescriptor.class);

    return ShrinkWrap.create(WebArchive.class)
            .addClasses(FireAndForget.class, FireAndForgetBean.class, BlockingFireAndForgetAlternativeBean.class)
            .addAsWebInfResource(
                    new StringAsset(beansXml.alternativeClass(BlockingFireAndForgetAlternativeBean.class).exportAsString()),
                    beansXml.getDescriptorName());
}

Spero possa aiutare!

Nel mio caso ho usato il codice da Bellow per specificare quale beans.xml file da includere:

JavaArchive jar = ShrinkWrap.create(JavaArchive.class)
                .addClasses(AutoService.class, AutoServiceCallerImp1.class, AutoServiceCallerImp2.class)
                .addAsManifestResource("META-INF/test.beans.xml", "beans.xml");
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top