Junit 不读取静态字段
Junit doesn't read static field
我有这个 class 和这个静态字段
public class Parameters {
public Parameters()
{
}
public static Image img = new Image(new File("myImage.png").toURI().toString());
}
和 junit class
import Parameters.*;
@Test
void test() {
Image img = Parameters.img; //error here
}
问题是,当我调试 Parameters.img 为 null 时,出现错误
java.lang.ExceptionInInitializerError,
我不知道如何修复它,从测试中读取该图像
还要提到图像 class 来自 javafx。
这种代码风格不是个好主意。
您的参数 class 包括静态初始化 - 任何时候任何代码只要在参数的一般方向上看,JVM 就会意识到参数尚未加载,因此 JVM 会退出并加载它;作为该作业的一部分,代码 new Image(new File("myImage.png").toURI().toString())
运行,并抛出异常。
由于多种原因,初始化器中的异常令人讨厌,因此得出结论:不要将可能出错的代码放入初始化器中。
更好的策略是创建一个方法:
private static Image getMyImage() {
return new Image(...);
}
或者可能涉及某种缓存(第一次加载它,以后只 return 缓存的对象)。现在抛出异常 'during normal program flow'(作为调用方法的一部分,而不是作为加载 class 的一部分)。
更一般地说,这个概念根本不适用于文件,您不希望图像作为单独的文件,它们是资源,应该与您的 class 文件位于同一位置,甚至 (特别是!)如果您的 class 文件在 jar 文件中。这涉及:new Image(Parameters.class.getResource("myImage.png"))
。这告诉 JVM 查找 Parameters.class 所在的相同位置。
这段代码应该仍然在方法中,而不是像这样在静态字段初始化中。
我有这个 class 和这个静态字段
public class Parameters {
public Parameters()
{
}
public static Image img = new Image(new File("myImage.png").toURI().toString());
}
和 junit class
import Parameters.*;
@Test
void test() {
Image img = Parameters.img; //error here
}
问题是,当我调试 Parameters.img 为 null 时,出现错误 java.lang.ExceptionInInitializerError, 我不知道如何修复它,从测试中读取该图像
还要提到图像 class 来自 javafx。
这种代码风格不是个好主意。
您的参数 class 包括静态初始化 - 任何时候任何代码只要在参数的一般方向上看,JVM 就会意识到参数尚未加载,因此 JVM 会退出并加载它;作为该作业的一部分,代码 new Image(new File("myImage.png").toURI().toString())
运行,并抛出异常。
由于多种原因,初始化器中的异常令人讨厌,因此得出结论:不要将可能出错的代码放入初始化器中。
更好的策略是创建一个方法:
private static Image getMyImage() {
return new Image(...);
}
或者可能涉及某种缓存(第一次加载它,以后只 return 缓存的对象)。现在抛出异常 'during normal program flow'(作为调用方法的一部分,而不是作为加载 class 的一部分)。
更一般地说,这个概念根本不适用于文件,您不希望图像作为单独的文件,它们是资源,应该与您的 class 文件位于同一位置,甚至 (特别是!)如果您的 class 文件在 jar 文件中。这涉及:new Image(Parameters.class.getResource("myImage.png"))
。这告诉 JVM 查找 Parameters.class 所在的相同位置。
这段代码应该仍然在方法中,而不是像这样在静态字段初始化中。