Junit@Test方法之间的独立性

本文探讨了在JUnit测试中,使用@Test注解的方法如何保持独立性。通过示例代码展示,每个@Test方法执行时,非静态属性会重新初始化,而静态属性在整个测试类中保持全局。建议使用@Before方法进行明确的初始化,以确保测试的清晰性和独立性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先看一段代码:

import org.junit.Test;

public class DealIntegerBeanTest {
    private IntegerBean integerBean=new IntegerBean();
    @Test
    public void printInfoOfIntegerBean() {
        new DealIntegerBean().printInfoOfIntegerBean(integerBean);
    }
    @Test
    public void printInfoOfIntegerBean_statcNumber_2() {
        IntegerBean.setStaticNumber(2);
        integerBean.setNotStaticNumber(2);
        new DealIntegerBean().printInfoOfIntegerBean(integerBean);
    }
    @Test
    public void printInfoOfIntegerBean_3() {
        new DealIntegerBean().printInfoOfIntegerBean(integerBean);
    }
}

控制台输出是:

StaticNumber:1
NoitStaticNumber:1
StaticNumber:2
NoitStaticNumber:2
StaticNumber:2
NoitStaticNumber:1

可见,以上3个@Test注解方法之间都是完全独立的,就像DealIntegerBeanTest这类被复制了3份,每份只含有一个@Test方法,然后个自己执行。因此,非静态属性每次都是全新的,静态属性还是会全局的!!
上面写法完全等价于:

public class DealIntegerBeanTest {
    private IntegerBean integerBean;
    @Before
    public void setUp() throws Exception {
        integerBean=new IntegerBean();
    }
    @Test
    public void printInfoOfIntegerBean() {
        new DealIntegerBean().printInfoOfIntegerBean(integerBean);
    }
    @Test
    public void printInfoOfIntegerBean_statcNumber_2() {
        IntegerBean.setStaticNumber(2);
        integerBean.setNotStaticNumber(2);
        new DealIntegerBean().printInfoOfIntegerBean(integerBean);
    }
    @Test
    public void printInfoOfIntegerBean_3() {
        new DealIntegerBean().printInfoOfIntegerBean(integerBean);
    }
}

第二种写法,使用@Before显式表明,在@Test执行前会执行setup(),从而对对变量integerBean进行初始化。
为了清楚表明@Test方法之前的独立性(静态变量不是独立的),强烈建议使用第二种方法!!并且测试类的编写习惯也是变量只声明,初始化单独在@Test方法中进行或者@Before方法中进行,@Before方法一般放机械性、重复性的初始化代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值