阿里HSF接口 springboot 单元测试consumer的方法

1、新建一个springboot项目,添加maven依赖

<!-- Alibaba EDAS Dependency -->
        <dependency>
            <groupId>com.alibaba.edas</groupId>
            <artifactId>edas-sdk</artifactId>
            <version>1.5.4</version>
        </dependency>
        <dependency>
            <groupId>com.taobao.hsf</groupId>
            <artifactId>LightApi</artifactId>
            <version>1.0.5</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>${commons-lang.version}</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${fastjson.version}</version>
        </dependency>

2、创建hsf-consumer.xml 配置好要测试的hsf接口

阿里HSF接口 springboot 单元测试consumer的方法

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:hsf="http://www.taobao.com/hsf"
       xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context" 
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://www.springframework.org/schema/context  
       http://www.springframework.org/schema/context/spring-context-4.0.xsd  
       http://www.taobao.com/hsf
       http://www.taobao.com/hsf/hsf.xsd" default-autowire="byName"> 
       
    <!-- Annotation Scan -->
	<context:annotation-config/>
	<context:component-scan base-package="com.kd.modeltest"/>

    <!--<bean id="yamlProperties" class="org.springframework.beans.factory.config.YamlPropertiesFactoryBean">-->
        <!--<property name="resources" value="classpath:application.yml"/>-->
    <!--</bean>-->

    <!--<context:property-placeholder properties-ref="yamlProperties"/>-->

    <!-- 消费服务 -->
    <hsf:consumer id="testService" interface="com.kd.modelapi.api.TestService"
    version="1.0.0" group="model">
    </hsf:consumer>

    <hsf:consumer id="modelCenterService" interface="com.kd.modelapi.api.IModelCenterService"
                  version="1.0.0" group="model">
    </hsf:consumer>
    
</beans>

 

3、在生成的test目录下的测试类中写代码,

阿里HSF接口 springboot 单元测试consumer的方法

package com.kd.modeltest;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.kd.modelapi.api.IModelCenterService;
import com.kd.modelapi.api.TestService;
import com.kd.modelapi.common.ResponseDto;
import com.kd.modelapi.vo.TestUserVo;
import com.taobao.hsf.lightapi.ServiceFactory;
import com.taobao.hsf.standalone.HSFEasyStarter;
import com.taobao.hsf.standalone.util.ServiceUtil;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.test.context.junit4.SpringRunner;


@RunWith(SpringRunner.class)
@SpringBootTest
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class ModelTestApplicationTests {

    @Value("${hsf.version}")
    private String version;
    @Value("${hsf.group}")
    private String group;
    private static String service = "com.kd.modelapi.api.TestService";
    private static String provider = "testServiceProvider";
    private static String consumer = "testService";
    private static String consumerXml = "hsf-consumer.xml";
    private static String sarPath = "E:\\software\\taobao-tomcat-7.0.59\\deploy";

    private Logger logger = LoggerFactory.getLogger("ModelTestApplicationTests");

  

    /**
     * 通过HSFUnit进行单元测试  最简单测试
     */
    //@Test
    public void contextLoadsInit() {
        String consumer = "testService";
        HSFEasyStarter.start(sarPath, "");//在用到consumer bean前启动hsf
        String springResourcePath = consumerXml;
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(springResourcePath);
        TestService testService = (TestService) ctx.getBean(consumer);
        ServiceUtil.waitServiceReady(testService);
        //add
//        TestUserVo tuv1 = new TestUserVo();
//        tuv1.setOffset(100);
//        tuv1.setUserName("zjy");
//        tuv1.setUserParentName("zzz");
//        tuv1.setUserDesc("this is a people");
//        ResponseDto responseVo1 = testService.addTestUser(tuv1);
//        System.out.println(responseVo1.toString());
        //query
        TestUserVo tuv2 = new TestUserVo();
        tuv2.setId(3);
        ResponseDto responseVo2 =  testService.queryTestUser(tuv2);
        System.out.println(responseVo2);
    }

    /**
     * 通过阿里提供的lightApi代码进行单元测试
     * 目前无法使用 需要更换sar包
     */
	//@Test
    public void lightApi() {
        // 这里设置Pandora地址,参数是sar包所在目录,如这里我的sar包地址是/Users/Jason/Work/AliSoft/PandoraSar/DevSar/taobao-hsf.sar,则只取前面的地址即可
        final ServiceFactory factory = ServiceFactory
                .getInstanceWithPath(sarPath);
        // 进行服务发布(若有发布者,无需再这里写)
		/*factory.provider(provider)// 参数是一个标识,初始化后,下次只需调用provider("helloProvider")即可拿出对应服务
				.service(service)// 接口全类名
				.version(version)// 版本号
				.group(group)// 组别
				.impl(new UserServiceImpl())// 对应的服务实现
				.publish();// 发布服务,至少要调用service()和version()才可以发布服务*/

        // 进行服务消费
        factory.consumer(consumer)// 参数是一个标识,初始化后,下次只需调用consumer("helloConsumer")即可直接拿出对应服务
                .service(service)// 接口全类名
                .version(version)// 版本号
                .group(group)// 组别
                .subscribe();
        // 同步等待地址推送,最多6秒。
        try {
            factory.consumer(consumer).sync();
        }catch (Exception e){
            e.printStackTrace();
        }
        // 用ID取出对应服务,subscribe()方法返回对应的接口
        TestService testService = (TestService) factory.consumer(consumer).subscribe();
        // 调用服务方法
        //testService.testHsf();
    }

    /**
     * 通过阿里提供的lightApi包,使用xml进行单元测试
     * 目前无法使用
     */
	//@Test
    public void xmlTest(){
        //XML 方式加载服务提供者
//		new ClassPathXmlApplicationContext("hsf-provider-beans.xml");
        //XML 方式加载服务消费者
        ClassPathXmlApplicationContext consumerContext=
                new ClassPathXmlApplicationContext("hsf-consumer.xml");
        //获取 Bean
        TestService testService=(TestService) consumerContext.getBean(consumer);
        //服务调用
        //testService.testHsf();
    }

}

注意 sar路径是指向你本地的sar包路径,更换sar包可以用不同的测试方法,资源可以到我分享的资源去下载。