问题记录本1--单元测试PowerMockito @Before与@BeforeClass

本文记录了在使用PowerMockito进行单元测试时遇到的问题,涉及到静态变量和单例对象的mock。在测试类`Car`中,由于`LOGGER`静态变量在类加载时初始化,导致`@Before`方法中mock的Logger无效。为解决此问题,将`@Before`改为`@BeforeClass`,但这样会导致其他测试方法中的 Door 对象不再被正确mock。最终通过理解`@BeforeClass`和`@Before`的区别,调整测试结构,确保每个测试方法都能正确执行mock操作。
摘要由CSDN通过智能技术生成

问题记录本1–单元测试PowerMockito @Before与@BeforeClass

最近写单元测试的时候遇到一个问题,记录如下:

被测试类:

public class Car() {
   
	private final static LogClass LOGGER = LogFactory.getLog(Car.class);
	public boolean drive() {
   
		// 打开车门
		String doorResult = Door.getInstance().open();
		try {
   
			if (doorResult != null && doorResult.isNotEmpty) {
   
				// 发动汽车
				return startCar();
			}
		} catch (Exception ex) {
   
			LOGGER.error("汽车发动异常", ex);
		}
		return false;
	}

	public boolean startCar() {
   
		...
	}
}

Car是现在需要被测试的类,其中该类中有一个静态变量LOGGER,drive方法中构建了一个单例Door,那么如果要写单元测试,需要模拟startCar抛出异常的case,那就要将静态变量和单例mock出来。一开始我的单测是这么写的:

@RunWith(PowerMockRunner.class)
@PrepareForTest({
   
        Car.class,
        Door.class
})
public class CarTest {
   
	@InjectMocks
	private Car car;

	private Door door;
	private LogClass logger;

	@Before
	public void setUp() {
   
		PowerMockito.mockStatic(Door.class);
		PowerMockito.mockStatic(LogFactory.class);
		
		door = PowerMockito.mock(Door
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值