使用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$"));
}
最佳答案
使用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的原因。祝你好运,测试愉快
关于java - Arquillian:相对于项目而不是服务器的路径,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27363501/