【发布时间】:2014-06-26 09:35:54
【问题描述】:
同样的语句在我的实际应用程序(网络服务)中工作得很好:
InputStream is = ServiceUtils.class.getResourceAsStream(
"file:/C:/Users/withheld/workspace/myproj/src/main/webapp/WEB-INF/classes/myproj.properties");
但在 JUnit 测试模块中,它只是不断返回 null。
为什么?
起初,我认为这是一个类路径问题,所以我添加了一个路径,如 here 所述。
但这并没有帮助。
所以,我使用this other SO thread 中描述的方法强制了一个蛮横的绝对路径。
但它仍然返回 null。
我做错了什么?
【问题讨论】:
-
我怀疑它甚至在您的实际应用程序中也能正常工作。
-
@BheshGurung 为什么?我无法反驳从
myproj.properties实际读取和使用的结果...请解释一下。 -
如果您真的确定它可以工作,那么它必须在实际应用程序中使用自定义类加载器。很明显,它与运行测试时使用的类加载器不同。恕我直言,我认为您最好阅读一下有关如何使用类和类加载器通常读取类路径中的资源的信息,然后改用它,因为这将是可移植的。
-
@BheshGurung 我同意。 JUnit 必须使用其他东西,但我不熟悉 JUnit 使用什么。我也尝试了原始的
InputStream is = ServiceUtils.class.getResourceAsStream("/myproj.properties");,但结果仍然为空。 -
看起来好一点。现在您需要确保在执行测试时将该文件所在的文件夹添加到类路径中。例如部署战争时,战争内部的
WEB-INF/classes会被服务器自动添加到类路径中。