在Arquillian测试中无法打开ressource文件

时间:2015-09-18 08:55:23

标签: java file archive jboss-arquillian shrinkwrap

我想在使用arquillian的集成测试中读取测试CSV文件(xxx.csv)。我按如下方式打包我的档案:

@Deployment
public static WebArchive createDeployment() {
    WebArchive archive = ShrinkWrap.create(WebArchive.class);
    archive.addClasses(FileReader.class, FileWriteService.class, MockDataFactory.class, CSVFileReader.class, ExcelFileReader.class);
    archive.addAsResource("config.properties").addAsResource("xxx.csv");
    System.out.println(archive.toString(true));
    return archive;
}

印刷品显示的地方:

> 7fadc596-9353-4cac-aacc-cf5ec5d94c16.war: /WEB-INF/
> /WEB-INF/classes/ /WEB-INF/classes/config.properties
> /WEB-INF/classes/com/ /WEB-INF/classes/com/goodgamestudios/
> /WEB-INF/classes/com/goodgamestudios/icosphere/
> /WEB-INF/classes/com/goodgamestudios/icosphere/service/
> /WEB-INF/classes/com/goodgamestudios/icosphere/service/fileReader/
> /WEB-INF/classes/com/goodgamestudios/icosphere/service/fileReader/CSVFileReader.class
> /WEB-INF/classes/com/goodgamestudios/icosphere/service/fileReader/ExcelFileReader$SheetHandler.class
> /WEB-INF/classes/com/goodgamestudios/icosphere/service/fileReader/ExcelFileReader.class
> /WEB-INF/classes/com/goodgamestudios/icosphere/service/fileReader/ExcelFileReader$xssfDataType.class
> /WEB-INF/classes/com/goodgamestudios/icosphere/service/fileReader/ExcelFileReader$1.class
> /WEB-INF/classes/com/goodgamestudios/icosphere/service/fileReader/FileReader.class
> /WEB-INF/classes/com/goodgamestudios/icosphere/service/fileWriter/
> /WEB-INF/classes/com/goodgamestudios/icosphere/service/fileWriter/FileWriteService.class
> /WEB-INF/classes/com/goodgamestudios/icosphere/datamodel/
> /WEB-INF/classes/com/goodgamestudios/icosphere/datamodel/MockData/
> /WEB-INF/classes/com/goodgamestudios/icosphere/datamodel/MockData/MockDataFactory.class
> /WEB-INF/classes/xxx.csv

如您所见,该文件显然位于存档(最后一行)中。

现在我正试图打开它。我试过了:

private File getFile(String filename) throws IOException {
    return convertInputStreamToFileHelper(getClass().getResourceAsStream(filename), filename);
}
new File(this.getClass().getResource("/xxx.csv").getFile()
new File("/xxx.csv")
new File("xxx.csv")

但没有一个可行。

3 个答案:

答案 0 :(得分:4)

您可以获取InputStream:this.getClass().getResourceAsStream("/xxx.csv"),但是无法在war中获取压缩资源的File对象。如果需要File对象,可以将InputStream内容复制到tmp文件。

答案 1 :(得分:0)

您必须使用文件的完整路径。要尝试查看以下代码:

URL fileURL = this.getClass().getResource("/WEB-INF/classes/xxx.csv");
System.out.println(fileURL);

你应该得到一个不同的URL。

小心getResource因为我认为它区分大小写。至少我有这个问题。

答案 2 :(得分:0)

我认为它总是取决于您使用的应用程序服务器及其类路径设置!

F.ex。这里我有一个test / resources文件,我将目标设置为WEB-INF / classes / file,Wildfly(JBoss)会在其中找到它:

.addAsWebInfResource("file.txt",
                     "classes/file.txt")

使用:

final InputStream inStream = this.getClass().getClassLoader()
                                .getResourceAsStream(fileName);