有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用Arquillian时,如何引用放置在WEBINF文件夹中的文件?

我正在使用maven和标准目录布局。所以我添加了一个testdata。src/test/resources文件夹中的xml文件,我还将其添加为:

.addAsWebInfResource("testdata.xml", "testdata.xml")

在部署方法中,我已经确认了它的存在。这将使文件出现在/WEB-INF/testdata.xml中。现在我需要在我的代码中引用这个文件,我尝试了几个不同的getClass().getResourceAsStream(...),但一次又一次失败,所以我现在需要一些建议

我的DBUnit集成测试需要它。这不可能吗


共 (1) 个答案

  1. # 1 楼答案

    今天,我正在努力满足同样的要求,但还没有找到任何完整的源代码样本,所以这里我要做一个我能做的最小的自包含测试:

    @RunWith(Arquillian.class)
    public class AttachResourceTest {
    
        @Deployment
        public static WebArchive createDeployment() {
            WebArchive archive =  ShrinkWrap.create(WebArchive.class).addPackages(true, "org.apache.commons.io")
                    .addAsWebInfResource("hello-kitty.png", "classes/hello-kitty.png");             
            System.out.println(archive.toString(true));
            return archive;
        }
    
        @Test
        public void attachCatTest() {
            InputStream stream = getClass().getResourceAsStream("/hello-kitty.png");
            byte[] bytes = null;
            try {
                bytes = IOUtils.toByteArray(stream);
            } catch (IOException e) {
                e.printStackTrace();
            }   
            Assert.assertNotNull(bytes);
        }
    }
    

    在你的hello kitty项目中。png文件转到src/test/resources。在测试存档中,它被打包到类路径上的/WEB-INF/classes文件夹中,因此您可以使用与测试场景使用的容器相同的类加载器加载它

    IOUtils来自apache commons io

    附加说明: 让我抓狂的一件事与服务器路径中的空格以及getResourceAsStream()如何转义这些特殊字符有关:sysLoader.getResource() problem in java