Spring错误——Junit测试——java.net.BindException: Address already in use: bind
背景
- 项目目录结构如下
-
- 其中application-dev.yml为开发环境,application-prod.yml为生产环境,application-test.yml为测试环境
- 每个环境使用的数据库不同,测试时使用test环境进行单元测试。
- 开发项目使用Junit批量进行单元测试时,报错:java.net.BindException: Address already in use: bind,如下
原因
- 两个测试类使用的环境不同,一个使用的是dev环境测试,一个使用的是test环境测试,代码如下
- ElecInvalidOrderTest测试类
-
/** * @author jingguoliang * @Description: 失效电费订单 * @date 2020/4/14 */ @RunWith(SpringRunner.class) @SpringBootTest @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_UNCOMMITTED) @ActiveProfiles(value = "dev") public class ElecInvalidOrderTest { private static final Logger logger = LoggerFactory.getLogger( ElecInvalidOrderTest.class ); @Before public void setUp() throws Exception { initializeDbData();//初始化数据 } public void initializeDbData() throws SQLException, IOException { } @After public void tearDown() throws Exception { } //失效电费订单1 @Test public void orderSuperviser1() { //调用业务服务 logger.info("BizType.elecorder_invalid is start"); }
-
- ElecWillInvalidOrderTest测试类
-
/** * @author jingguoliang * @Description: 即将即将失效电费订单 * @date 2020/4/14 */ @RunWith(SpringRunner.class) @SpringBootTest @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_UNCOMMITTED) @ActiveProfiles(value = "test") public class ElecWillInvalidOrderTest { private static final Logger logger = LoggerFactory.getLogger( ElecWillInvalidOrderTest.class ); @Before public void setUp() throws Exception { initializeDbData();//初始化数据 } public void initializeDbData() throws SQLException, IOException { } @After public void tearDown() throws Exception { } //即将即将失效电费订单1 @Test public void orderSuperviser1() { //调用业务服务 logger.info("BizType.elecorder_will_invalid is start"); }
-
- ElecInvalidOrderTest测试类
- 每一个环境在测试开始时都会使用启用一个Adress,所以会出现地址已经占用的问题
解决办法
- 如果批量测试,只能把测试环境进行统一,都改成dev或者test