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");
            }
  • 每一个环境在测试开始时都会使用启用一个Adress,所以会出现地址已经占用的问题

解决办法

  • 如果批量测试,只能把测试环境进行统一,都改成dev或者test
原文地址:https://www.cnblogs.com/zuiyue_jing/p/12711402.html