选项 A) 使用 ServletContext.getResourceXXX()
你应该有一个 Aquillarian MockHttpSession 和一个 MockServletContext。例如:
@Test
public void myTest()
{
HttpSession session = new MockHttpSession(new MockServletContext());
ServletLifecycle.beginSession(session);
..testCode..
// You can obtain a ServletContext (will actually be a MockServletContext
// implementation):
ServletContext sc = session.getServletContext();
URL url = sc.getResource("/WEB-INF/testdata.xml")
Path resPath = new Path(url);
File resFile = new File(url);
FileReader resRdr = new FileReader(resFile);
etc...
..testCode..
ServletLifecycle.endSession(session);
}
您可以在以下位置创建资源文件和子目录:
- Web 模块文档根目录 - 可以从浏览器和类访问资源
- WEB-INF/classes/ - 资源可以被类访问
- WEB-INF/lib/*.jar 源 jar - 类可访问
- WEB-INF/lib/*.jar 专用的仅资源 jar - 可供类访问
- WEB-INF/ 直接在目录中 - 类可访问。这就是你所要求的。
在所有情况下,都可以通过以下方式访问资源:
URL url = sc.getResource("/<path from web doc root>/<resourceFileName>");
OR
InputStream resIS = sc.getResourceAsStream("/<path from web doc root>/<resourceFileName>");
>
这些将被打包到 WAR 文件中,并且可能会分解到已部署的应用服务器上的目录中,或者它们可能会保留在应用服务器上的 WAR 文件中。无论哪种方式 - 访问资源的行为相同:使用 ServletContext.getResourceXXX()。
请注意,作为一般原则,(5) 顶级 WEB-INF 目录本身是供服务器使用的。不将您的网络资源直接放在此处或直接在此处创建自己的目录是“礼貌的”。相反,最好使用上面的(2)。
JEE5 教程网络模块
JEE6 教程网络模块
选项 B):使用 Class.getResourceXXX()
首先将资源从 WEB-INF 文件夹移到 WEB-INF/classes 中(或在 jar WEB-INF/lib/*.jar 中)。
如果您的测试课程是:
- com.abc.pkg.test.MyTest 在文件 WEB-INF/classes/com/abc/pkg/test/MyTest.class
你的资源文件是
- WEB-INF/classes/com/abc/pkg/test/resources/testdata.xml(或jar文件中的等价物)
使用相对文件位置访问文件,通过 Java 类加载器 - 查找相对于类路径的文件夹/罐子:
java.net.URL resFileURL = MyTest.class.getResource("resources/testdata.xml");
File resFile = new File(fileURL);
OR
InputStream resFileIS =
MyTedy.class.getResourceAsStream("resources/testdata.xml");
使用完整的类包限定访问文件,使用 Java 类加载器 - 查找相对于类路径的文件夹/罐子:
java.net.URL resFileURL = MyTest.class.getResource("/com/abc/pkg/test/resources/testdata.xml");
File resFile = new File(fileURL);
OR
InputStream resFileIS =
MyTest.class.getResourceAsStream("/com/abc/pkg/test/resources/testdata.xml");
OR
java.net.URL resFileURL = MyTest.class.getClassLoader().getResource("com/abc/pkg/test/resources/testdata.xml");
File resFile = new File(fileURL);
OR
InputStream resFileIS =
MyTest.class.getClassLoader().getResourceAsStream("com/abc/pkg/test/resources/testdata.xml");
希望能搞定!@B)