0 Replies Latest reply on Nov 15, 2014 8:37 AM by tvibes

    How to reuse test methods (A/B integration testing) ?

    tvibes

      Hi everybody,

      I would like to do some kind of A/B integration testing. Between my A tests and my B tests I only need to change what is deployed in the container.

      To achieve that I have 2 classes, and I use inheritance to avoid code duplication on test methods (I have 24 test scenarios) :

       

      /**
       * Test A
       */
      @RunWith(Arquillian.class)
      public class TestA {       
              
          @Deployment
          public static WebArchive createDeployment() {
                WebArchive archive = ...; //Put my stuff in the WebArchive
      
                //my JSF page for testA
                archive.addAsWebResource(new File("src/it/webapp/testA.xhtml"),    ArchivePaths.create("/index.html") );
                return archive;
          }
          
          
          @Test
          @InitialPage("/index.jsf")
          @BrowserVersion(Browser.FIREFOX_3_6)
          public void shouldDoSomething(JSFServerSession server, JSFClientSession client){
              //... nothing interesting here
          }
      
          @Test
          @InitialPage("/index.jsf?param1=value1")
          @BrowserVersion(Browser.FIREFOX_3_6)
          public void shouldDoSomethingElse(JSFServerSession server, JSFClientSession client){
              //... nothing interesting here
          }
      
          //[...]
      
          @Test
          @InitialPage("/index.jsf")
          @Cookies(names = {"aCookieName"}, values = {"aiuzshgtu"})
          @BrowserVersion(Browser.FIREFOX_3_6)
          public void shouldDoSomething_24(JSFServerSession server, JSFClientSession client){
              //... nothing interesting here
          }
      }
      
      /**
       * Test B
       */
      @RunWith(Arquillian.class)
      public class TestB extends TestA {
      
          @Deployment
          public static WebArchive createDeployment() {
                WebArchive archive = TestA.createDeployment(); //Reuse the WebArchive of testA
              
                //overrides my JSF page for testB
                archive.addAsWebResource(new File("src/it/webapp/testB.xhtml"),    ArchivePaths.create("/index.html") );
                return archive;
          }
      }
      

      Since last week it worked as we were using a (pretty) old Arquillian version (1.0.1.Final). I upgraded to the last version and it doesn't work anymore as Arquillian now supports multiple @Deployment annotated methods. So when I execute TestB class, Arquillian looks in TestA class, finds the @Deployment method and reports the conflict :-)

       

      But I can't find a good design to achieve our A/B testing.

      Is this use case is cover by Arquillian? Is someone here has already done that with Arquillian?

       

      Some enlightment would be greatly appreciated (even a RTFM) :-)

       

      I currently use :

      • Arquillian 1.1.5.Final
      • JSFUnit 2.0.0.Beta2