SpringBoot 集成Junit比较简单,首先在pom.xml 中增加Junit 的maven 依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

然后, 就可以在 src/test/java/ 目录下编写测试用例了,示例如下:

# GdnMetaApiHelperTest.groovy

package com.app..test

import com.app.gdn.helper.GdnMetaApiHelper
import groovy.transform.CompileStatic
import org.junit.Test
import org.junit.runner.RunWith
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.test.context.junit4.SpringRunner

@CompileStatic
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class GdnMetaApiHelperTest {
    @Autowired
    GdnMetaApiHelper gdnMetaApiHelper;

    @Test
    public void testUpdateInsMember() {
        String gdnInsName = "gdntest20"
        String memberKind = "cluster"
        String memberName = "dangyitest13gdnstandby6"
        String status = "active"
        String requestId = "test_request"
        gdnMetaApiHelper.updateInsMember(gdnInsName, memberKind, memberName, null, status, requestId)
    }
}

但是在运行的过程中却一直报错

com.aliyun.apsaradb.gdnmetaapi.ApiException: java.net.UnknownHostException: http: nodename nor servname provided, or not known
	at com.aliyun.apsaradb.gdnmetaapi.ApiClient.execute(ApiClient.java:972)
	at com.aliyun.apsaradb.gdnmetaapi.api.DefaultApi.getGlobalConfigWithHttpInfo(DefaultApi.java:1496)

问题分析

  • gdnmetaapi 的host 我是配置在 src/main/resource/application.yaml 里面的,配置检查后确认没问题,但是运行却一直还报错

  • 查看编译出来的target目录,发现 application.yaml 只在 classes目录,而在 test-classes 目录里面没有

  • 结论: test-classes 目录下面缺少 application.yaml 文件导致加载不到配置,从而运行失败。

解决办法

  • 方法一: 将src/main/resources/ 下面的配置文件拷贝一份到 src/test/resources 目录下。 但同一个配置需要维护两份,不建议。
  • 方法二:修改pom.xml 配置, 将src/main/resources 目录下的文件编译到test-classes 下面去

重新运行, 会发现已经将src/main/resources 目录下的文件编译到test-classes 里面去了