在测试时是否有办法将属性注入(inject)Java list (或注入(inject)整个 list )?
我们正在从 list (版本号)中读取一个值,该值在测试时解析为null。
到目前为止,我们已经尝试将硬编码的MANIFEST.MF文件放在我们的测试根目录中,但是没有用。
这是我们用来读取 list 的代码:
private Attributes getManifest() {
URLClassLoader cl = (URLClassLoader) getClass().getClassLoader();
Manifest manifest;
try {
URL url = cl.findResource("META-INF/MANIFEST.MF");
manifest = new Manifest(url.openStream());
} catch (IOException e) {
throw Throwables.propagate(e);
}
return manifest.getMainAttributes();
}
作为最后的手段,我们将包装读取 list 并对其进行模拟的功能,但这是集成测试,应该被认为是黑盒(即,我们避免了模拟)。
附加信息:Java 7,在IntelliJ中或从Gradle中运行Junit测试。
最佳答案
您可能想尝试jcabi-manifests库:http://manifests.jcabi.com/。它是Java list 工具的抽象,允许您在运行时附加新数据,甚至合并多个 list 。
典型的用法是访问Manifests.DEFAULT
单例,该单例在运行时保存应用程序的MANIFEST.MF条目。可以附加到该对象:
Manifests.DEFAULT.put("Test-Property", "Hello");
Manifests
Javadoc:http://manifests.jcabi.com/apidocs-1.1/com/jcabi/manifests/Manifests.html现在,每当您再次访问
Manifests.DEFAULT
时,它将具有条目“Test-Property”。请注意,Manifest.DEFAULT
实现了Map
接口(interface):System.out.println(Manifests.DEFAULT.get("Test-Property")) // Prints "Hello"