无法在 Arquillian 测试中打开资源文件
Can't open ressource file in Arquillian test
我想在使用 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.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")
但 none 会起作用。
您必须使用文件的完整路径。为了尝试查看以下代码:
URL fileURL = this.getClass().getResource("/WEB-INF/classes/xxx.csv");
System.out.println(fileURL);
你应该得到一个 URL 不同于 null 的值。
小心使用 getResource,因为我认为它区分大小写。至少我对此有疑问。
您可以获取 InputStream: this.getClass().getResourceAsStream("/xxx.csv")
,但无法获取 war 中打包资源的 File 对象。如果您需要 File 对象,您可以将 InputStream 内容复制到 tmp 文件。
我认为这始终取决于您使用的应用程序服务器及其类路径设置!
F.ex。这里我在 test/resources 中有一个文件,我将目标设置为 WEB-INF/classes/file,Wildfly (JBoss) 将在其中找到它:
.addAsWebInfResource("file.txt",
"classes/file.txt")
使用:
final InputStream inStream = this.getClass().getClassLoader()
.getResourceAsStream(fileName);
我想在使用 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.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")
但 none 会起作用。
您必须使用文件的完整路径。为了尝试查看以下代码:
URL fileURL = this.getClass().getResource("/WEB-INF/classes/xxx.csv");
System.out.println(fileURL);
你应该得到一个 URL 不同于 null 的值。
小心使用 getResource,因为我认为它区分大小写。至少我对此有疑问。
您可以获取 InputStream: this.getClass().getResourceAsStream("/xxx.csv")
,但无法获取 war 中打包资源的 File 对象。如果您需要 File 对象,您可以将 InputStream 内容复制到 tmp 文件。
我认为这始终取决于您使用的应用程序服务器及其类路径设置!
F.ex。这里我在 test/resources 中有一个文件,我将目标设置为 WEB-INF/classes/file,Wildfly (JBoss) 将在其中找到它:
.addAsWebInfResource("file.txt",
"classes/file.txt")
使用:
final InputStream inStream = this.getClass().getClassLoader()
.getResourceAsStream(fileName);