Solon v3.0.3

for JUnit5 增强(默认)

</> markdown

提醒:Junit5 的 @Test 为 org.junit.jupiter.api.Test,不要和 Junit4 的搞混了

1、主要扩展有

扩展说明
@SolonTest 注解用于指定 Solon 的测试主类。
@Rollback 注解用户测试时事务回滚用
@Import 注解用于导入测试所需的配置文件
HttpTester 类用于 Http 测试的基类

2、使用示例

引入插件:(solon-test

<dependency>
    <groupId>org.noear</groupId>
    <artifactId>solon-test</artifactId>
    <scope>test</scope>
</dependency>

a)使用 @Test 注解

即使用 junit 5 的原生能力

import org.junit.jupiter.api.Test;

public class DemoTest {
    @Test
    public void hello() {
        System.out.println("Hello " + userName);
    }
}

b)使用 @SolonTest 注解,增加 Solon 能力

当前类将做为 Solon 启动的主类。还可借助 @Import 导入其它的包或配置(顺带提示:@Import 只在 主类上 或者 @Configuration类 上有效)。

  • 提供 Solon 能力支持
import org.junit.jupiter.api.Test;

@Import(profiles = "classpath:demo/app.yml")
@SolonTest
public class DemoTest {

    @Inject("${user.name:world}")
    String userName;

    @Test
    public void hello() {
        System.out.println("Hello " + userName);
    }
}
  • 提供 Solon 能力支持,并导扫描其它包
import org.junit.jupiter.api.Test;

@Import(scanPackages = "demo.b")
@SolonTest
public class DemoTest {

    @Inject("${user.name:world}")
    String userName;

    @Test
    public void hello() {
        System.out.println("Hello " + userName);
    }
}

c)使用 @SolonTest 注解的更多能力 [推荐]

通过 @SolonTest 注解,可指定其它类为启动主类并进行测试。

  • 启动 Solon 应用,并进行 http 接口测试
import org.junit.jupiter.api.Test;

@SolonTest(webapp.TestApp.class) 
public class DemoTest extends HttpTester{

    @Inject
    UserService userService;

    @Test
    public void hello() {
        //测试注入的Service
        assert userService.hello("world").equals("hello world");
    }
    
    @Test
    public void demo1_run0() {
        //HttpTester 提供的请求本地 http 服务的接口
        assert path("/demo1/run0/?str=").get().equals("不是null(ok)");
    }
    
    @Test
    public void demo2_header() throws Exception {
        Map<String, String> map = new LinkedHashMap<>();
        map.put("address", "192.168.1.1:9373");
        map.put("service", "wateradmin");
        map.put("meta", "");
        map.put("check_type", "0");
        map.put("is_unstable", "0");
        map.put("check_url", "/_run/check/");

        assert path("/demo2/header/")
                .header("Water-Trace-Id", "")
                .header("Water-From", "wateradmin@192.168.1.1:9373")
                .data(map)
                .post()
                .equals("OK");
    }
}
  • 启动 Solon 应用,并设定启动参数
import org.junit.jupiter.api.Test;

@SolonTest(value=webapp.TestApp.class, args="--server.port=9001") 
public class DemoTest extends HttpTester{

    @Inject
    UserService userService;

    @Test
    public void hello() {
        //测试注入的Service
        assert userService.hello("world").equals("hello world");
    }
}