gpt4 book ai didi

java - 阿奎利安 : path relative to project instead of server

转载 作者:行者123 更新时间:2023-12-02 05:10:41 24 4
gpt4 key购买 nike

在使用 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$"));
}

最佳答案

How can I use a project-relative path when using Arquillian/Shrinkwrap (...)?

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

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

因此请修改您的部署:

@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 .

关于java - 阿奎利安 : path relative to project instead of server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27363501/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com