Arquillian:相对于项目而不是服务器的路径

时间:2014-12-08 17:29:14

标签: java path jboss-arquillian shrinkwrap

使用Arquillian / Shrinkwrap测试我的测试用例时,如何使用项目相对路径?

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

测试时会给我这个例外 java.io.FileNotFoundException: C:\Uprogs\jboss-eap-6.2.4\bin\src\ZZZZZ.xml

它尝试在我部署测试的服务器的文件夹中找到该文件。 而不是那样,我希望他查看相对于我的项目的文件夹(例如C:\Users\xy\workspaces\MyProject\src\ZZZZZ.xml)。搜索了互联网但没有找到任何东西

Shrinkwrap的部署方式如下:

@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$"));
}

1 个答案:

答案 0 :(得分:2)

  

使用Arquillian / Shrinkwrap(...)时如何使用项目相对路径?

这是一种荒谬的做法,不要这样做:]

Arquillian背后的想法是创建微型部署(这意味着:jar/war/ear使用ShrinkWrap工具进行存档)并将所有内容都包含在该存档中。

所以请修改你的部署:

@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")
        (...)
}

然后使用getResourceAsStream()从类路径加载文件:

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

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

它更好,因为测试所需的一切都已包含在存档中。没有亲戚,也没有绝对的路径名称。

聚苯乙烯。个人建议:小心DbUnit,因为您可能会注意到,随着项目的增长,制作和管理许多xml数据集可能会变得越来越大。这就是为什么我更喜欢DbSetup

祝你好运并有一个不错的测试