阿里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接口
<?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目录下的测试类中写代码,
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包可以用不同的测试方法,资源可以到我分享的资源去下载。