Mockito是常用的写单元测试覆盖率的框架之一。在有的业务服务中,使用了多线程,这时候我们如何mock多线程呢?

其实很简单,通过ReflectionTestUtils手动setter多线程实例即可。

代码如下:

import org.junit.Before;
import org.junit.Test;
import org.mockito.MockitoAnnotations;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.test.util.ReflectionTestUtils;

public class OrderServiceTest {
	private OrderService orderService = new OrderService();
	
	@Before
	public void initMocks() {
		MockitoAnnotations.initMocks(this);// 将注解Mock对象注入到注解InjectMocks的被测类中
		ThreadPoolTaskExecutor commonExecutor = new ThreadPoolTaskExecutor();
		commonExecutor.setCorePoolSize(5);
		commonExecutor.setMaxPoolSize(10);
		commonExecutor.setQueueCapacity(1000);
		commonExecutor.setKeepAliveSeconds(300);
		commonExecutor.afterPropertiesSet();
		ReflectionTestUtils.setField(orderService, "commonExecutor", commonExecutor);
	}

有不会用的同学欢迎提问。