JUnit测试前仅执行一次初始化代码及@BeforeClass报错解决
解决JUnit测试仅执行一次初始化的问题
我来帮你搞定这个JUnit初始化的困扰!你想要的是在所有测试方法运行前只执行一次初始化代码,但用@Before会重复跑,用@BeforeClass又报错,其实是没掌握@BeforeClass的正确用法~
为什么用@BeforeClass会报错?
你看到的java.lang.Exception: Method InstalizemockTest() should be static错误,是因为JUnit对@BeforeClass注解的方法有强制要求:
- 必须是static静态方法
- 必须是
public、无返回值(void)、无参数的方法
因为@BeforeClass是针对整个测试类的初始化,在测试类的实例还没创建的时候就会被调用,所以只能调用类级别的静态方法。
正确的代码示例
把你的初始化方法改成静态的,同时如果要在这个方法里给变量赋值,变量也得是静态的(因为静态方法只能访问静态成员):
import org.junit.BeforeClass; import org.junit.Test; public class YourTestClass { // 静态变量,用于存储全局初始化的数据 private static Object me; // 用@BeforeClass注解的静态初始化方法,仅执行一次 @BeforeClass public static void InitializeTestClass() { // 这里写只需要运行一次的初始化逻辑 me = configReader.read(); } @Test public void SumTest() { // 测试代码,此时me已经完成初始化 } @Test public void AnotherTest() { // 另一个测试方法,不会重新执行InitializeTestClass } }
再理清两个注解的区别,避免踩坑
@Before:每个测试方法执行前都会运行一次,适合用来重置测试对象状态、准备每个测试都需要的临时数据;@BeforeClass:整个测试类生命周期内仅运行一次,适合处理耗时的全局初始化,比如读取配置文件、建立数据库连接这类操作。
内容的提问来源于stack exchange,提问作者user9426680
相关产品推荐
相关产品推荐

