Solon

@SolonTest 使用说明

</> markdown

业务型的项目测试,都应该使用 @SolonTest 注解(经常有用户无视它,所以独文再提一下):

  • 可以指定启动类
  • 如果启动类有 main 函数,则会运行 main 函数(摸拟了真实的项目启动)
  • 有 main 函数时,则只会启动一个 SolonApp 实例(其它测试,会不断实例化 SolonTestApp 实例,以实现环境隔离)
  • 其它还可以指定应用属性,启动参数,环境等

注解属性说明:

属性说明示例
value启动类(默认为空,表示当前类)
classes启动类(默认为,表示当前类)
delay延迟秒数(默认为1)
env环境配置
args启动参数args="-server.port=9999"
properties应用属性properties="solon.app.name=demoapp"
debug是否调试模式(默认为 true)
isAot是否 AOT 运行(默认为 fasle)

1、启动 Solon 应用,并测试

以 TestApp 为启动类进行启动。测试一个 service 接口:

@SolonTest(webapp.TestApp.class) 
@RunWith(SolonJUnit4ClassRunner.class)
public class DemoTest{
    @Inject
    UserService userService;

    @Test
    public void hello() {
        assert userService.hello("world").equals("hello world");
    }
}

以 TestApp 为启动类进行启动,并指定环境。测试一个 service 接口:

@SolonTest(value=webapp.TestApp.class, env="dev") 
@RunWith(SolonJUnit4ClassRunner.class)
public class DemoTest{
    @Inject
    UserService userService;

    @Test
    public void hello() {
        assert userService.hello("world").equals("hello world");
    }
}

2、启动 Solon 应用,并进行 http 接口测试

基于 HttpTester 扩展测试类,方便做 http 本地接口测试:

@SolonTest(webapp.TestApp.class) 
@RunWith(SolonJUnit4ClassRunner.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");
    }
}