user4122522
user4122522

Reputation:

arquillian + shrinkwrap + seam: how to create deployment package

I have a seam 2.2.2 aplication which I'm migrating to jboss eap 6 (AS7). As the tests were in the old jboss embedded container, so I started to use arquillian but I could not discover hot to create a deployment package.

This is one of my attempts:

@Deployment
@OverProtocol("Servlet 3.0") 
public static Archive<?> createDeployment() throws IOException {

    // Build the ear with Maven by hand before run the test!
    final EnterpriseArchive ear = ShrinkWrap.createFromZipFile(
           EnterpriseArchive.class, new File("../Sin-ear/target/Sin.ear"));

    final JavaArchive testjar = ShrinkWrap.createFromZipFile(
           JavaArchive.class, new File("./target/test.jar"));
    //final JavaArchive testjar = ShrinkWrap.create(JavaArchive.class, "test.jar") //other attempt
    //     .addPackages(true, "com.miles.knowledge.test");

    ear.addAsModule(testjar);
    return ear;
}

And it fails when I run the test class as JUnit test (I can see the aplication deployment with no errors):

java.lang.ClassNotFoundException: com.miles.knowledge.test.GreeterTest from [Module "deployment.Sin.ear.Sin.war:main" from Service Module Loader]
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:213)
    ...

It seems that I have to package the test class into a war package, but I'm kind of lost, I need some help.

Upvotes: 0

Views: 408

Answers (1)

DaveB
DaveB

Reputation: 3083

This kind of deployment should work (note adding the test class to the war)...

@RunWith(Arquillian.class)
public class JsfTest extends org.jboss.seam.mock.JUnitSeamTest{

    @Deployment(name="UserLoginTest")
    @OverProtocol("Servlet 3.0") 
    public static Archive<?> createDeployment(){

        EnterpriseArchive er = Deployments.webAppDeployment();
        WebArchive web = er.getAsType(WebArchive.class, "WebApp-web.war");
        er.addAsModule(Testable.archiveToTest(web));

        web.addClasses(JsfTest.class)
            .addAsResource(EmptyAsset.INSTANCE, "seam.properties")
            .delete("/WEB-INF/web.xml");
        web.addAsWebInfResource("mock-web.xml", "web.xml");

        return er;

    }
}

public class Deployments {
   public static EnterpriseArchive webAppDeployment() {
       return ShrinkWrap.create(ZipImporter.class, "WebApp.ear")
           .importFrom(new File("../WebApp-ear/target/WebApp.ear"))
           .as(EnterpriseArchive.class);
   }
}

Upvotes: 1

Related Questions