2014-12-08 4 views
0

Arquillian/Shrinkwrap을 사용하여 테스트 케이스를 테스트 할 때 프로젝트 기준 경로를 어떻게 사용할 수 있습니까?
그것은 내가 위에 테스트를 배포하는 서버의 폴더 내 파일을 찾으려고 java.io.FileNotFoundException: C:\Uprogs\jboss-eap-6.2.4\bin\src\ZZZZZ.xmlArquillian : 서버 대신 프로젝트에 대한 경로

을 테스트 할 때

IDataSet dataSet = new FlatXmlDataSetBuilder().build(new File("src\\ZZZZZ.xml")); 
insertFromXML(dataSet); 

나에게이 예외를 제공 할 것입니다. 그보다는 내 프로젝트와 관련하여 폴더를 보길 원합니다 (예 : C:\Users\xy\workspaces\MyProject\src\ZZZZZ.xml). 인터넷을 검색하지만

쉬 링크 랩은 다음과 같이 전개됩니다 아무것도

발견 : Arquillian/쉬 링크 랩 (...)를 사용하는 경우

@Deployment 
public static Archive<?> createDeployment() { 
    File[] libs = Maven.resolver() 
      .loadPomFromFile("pom.xml").resolve(
        "jcifs:jcifs" 
        , "org.dbunit:dbunit" 
        , "com.ibm:db2jcc_license_cisuz" 
        , "com.ibm:db2jcc" 
        ) 
      .withTransitivity() 
      .asFile(); 

    return ShrinkWrap.create(WebArchive.class, "test.war") 
      .addAsLibraries(libs) 
      .addPackage("de.abc.RuleEditor") 
      .addAsResource("de/abc/RuleEditor/messages.properties", "messages.properties") 
      .addAsManifestResource("test-jboss-deployment-structure.xml","jboss-deployment-structure.xml") 
      .addAsWebInfResource("test-beans.xml", "beans.xml")  
      .addAsWebInfResource(
        new StringAsset("<faces-config version=\"2.0\"/>"), "faces-config.xml") 
        .merge(ShrinkWrap.create(GenericArchive.class).as(ExplodedImporter.class) 
          .importDirectory("src/main/webapp").as(GenericArchive.class), "/", Filters.include(".*\\.xhtml$")); 
} 

답변

2

가 어떻게 프로젝트 상대 경로를 사용할 수 있습니까?

그것은 말도 안되는 접근 방식은 그 길을 갈하지 않습니다입니다 :]

Arquillian 뒤에 아이디어는 마이크로 배포를 만드는 것입니다 (이것은 의미 : jar/war/ear 보관 ShrinkWrap 도구를 사용하여) 그 아카이브 내부의 모든 것을 포함한다.

@Test 
public void test_something() { 
    FlatXmlDataSetBuilder builder = new FlatXmlDataSetBuilder(); 
    builder.setColumnSensing(true); 

    FlatXmlDataSet xmlDataSet = builder.build(
      this.getClass().getResourceAsStream("/dbunit/testset.xml")); 
    // ... 

그것은 테스트하기 위해 필요한 것을 다 같이이며, 훨씬 더 : 클래스 경로에서 파일을로드 getResourceAsStream()를 사용하여 다음

@Deployment 
public static Archive<?> createDeployment() { 

return ShrinkWrap.create(WebArchive.class, "test.war") 
     (...) 
     .addAsLibraries(libs) 
     // Add in below way any additional file to the archive 
     .addAsResource("path-to-testset.xml", "dbunit/testset.xml") 
     .addPackage("de.abc.RuleEditor") 
     .addAsResource("de/abc/RuleEditor/messages.properties", "messages.properties") 
     .addAsManifestResource("test-jboss-deployment-structure.xml","jboss-deployment-structure.xml") 
     (...) 
} 

을 그리고 :

그래서 배포를 수정하시기 바랍니다 이미 아카이브에 포함되어 있습니다. 상대 경로 나 절대 경로 이름이 없습니다.

ps. 개인적 조언 : DbUnit에 대해 조심하십시오. 미래에 많은 xml 데이터 세트를 만들고 관리하는 것이 프로젝트가 커질수록 더 커지고 커질 수 있습니다. 그래서 나는 DbSetup을 선호합니다.

행운을 빌어서 좋은 시험을 보았습니다.