2014-11-20 2 views
4

TestNG를 사용하여 Arquillian에 glassfish 3.1.2.2가 내장 된 통합 테스트를 작성합니다. 이러한 테스트를 병렬로 실행할 수 있기를 원합니다.이 경우 글래스 피쉬 포트와 데이터베이스 이름을 동적으로 구성해야합니다. 우리는 이미이 설정을 가지고 있으며 arquillian 테스트를 재사용하고 싶습니다. 제가 누락 된 부분은 데이터베이스를 준비하고 빈 포트를 검색하고 glassfish 구성 (domain.xml, glassfish-resources.xml 일 수도 있음)을 업데이트 할 수있는 '컨테이너 시작 전'훅입니다. 이것에 대한 '깨끗한'해결책이 있습니까, 아니면 Arquillian 개발자가 사용하지 않았던가요?Arquillian - 프로그래밍 방식 구성

내가 해킹 한 방법은 현재 arquillian의 beforeSuite 메서드를 재정의하는 것이지만이 메서드는 테스트 시작시와 컨테이너 (따라서 내 애처로운 정적 플래그)에서 두 번 호출됩니다. 스위트 전에 arquillian 년대를 가로 챌 수있는 방법이 없기 때문에 둘째,이 솔루션은 JUnit을 기반으로 테스트를 위해 작동하지 않을 것입니다 :

public class FullContainerIT extends Arquillian { 

    private static boolean dbInitialized; 

    //@RunAsClient <-supported by @Test only 
    @Override 
    @BeforeSuite(groups = "arquillian", inheritGroups = true) 
    public void arquillianBeforeSuite() throws Exception { 
     if (dbInitialized == false) { 
      initializeDb(); 
      dbInitialized = true; 
     } 
     super.arquillianBeforeSuite(); 
    } 
} 

몇 가지 아이디어를 내가했다 :
+ @BeforeSuite @RunAsClient 내가 필요한 것 같다 필요하지만, @RunAsClient이 지원됩니다 @Test 만;
+ Arquillian JavaDocs에서 org.jboss.arquillian.container.spi.event.container.BeforeStart 이벤트를 보았지만 Arquillian 이벤트를 듣는 데 아무런 단서가 없습니다.
+ @DeploymentShrinkWrap Descriptor을 생성 할 가능성이 있지만 Glassfish 리소스를 지원하지 않습니다.

답변

4

JBoss forum에서 내 문제의 클린 솔루션을 발견했습니다. LoadableExtension SPI를 등록하고 arquillian config (xml에서로드 됨)를 수정할 수 있습니다. 여기서 데이터베이스를 만들고 glassfish-resources.xml을 적절한 값으로 필터링 할 수 있습니다. 설정은 다음과 같습니다

package com.example.extenstion; 

public class AutoDiscoverInstanceExtension 
       implements org.jboss.arquillian.core.spi.LoadableExtension { 

    @Override 
    public void register(ExtensionBuilder builder) { 
     builder.observer(LoadContainerConfiguration.class); 
    } 
} 

package com.example.extenstion; 

public class LoadContainerConfiguration { 

    public void registerInstance(@Observes ContainerRegistry, ServiceLoader serviceLoader) { 

     //Do the necessary setup here 
     String filteredFilename = doTheFiltering(); 

     //Get the container defined in arquillian.xml and modify it 
     //"default" is the container's qualifier 
     Container definition = registry.getContainer("default"); 
     definition.getContainerConfiguration() 
       .property("resourcesXml", filteredFilename); 
    } 
} 
또한이 내용으로 파일
META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension
를 작성하여 SPI 확장을 구성해야

:

com.example.extenstion.AutoDiscoverInstanceExtension