




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
junit4osgi的使用介绍1. 简介Junit4OSGi继承于junit的简单测试框架,可以在OSGI运行环境中进行测试。针对集成测试或是需要在一个OSGI环境中进行单元测试。结构如下:它分为三个部分:(1) Testsy stem 是真正的应用,被测试的系统(比如:声明式服务部分的测试)。(2) Tests是包含测试代码的bundle,用来测试被测试的系统。(3) Framework是测试框架,包括启动测试Runner和执行测试Runtime,在测试声明式服务中我们使用内嵌的loong框架作为测试框架。2. 使用Junit4OSGi进行测试的操作说明:(1)要对被测试的系统进行测试时,Tests必须是一个新建maven工程,测试的代码必须在src/main/java目录下,而不能在被测试部分srctestjava目录下直接写测试代码(比如要测试声明式服务loong-dservice-impl中的服务注册方面,我们不能在它的srctestjava目录下写测试代码)。(2)所写的测试用例必须继承OSGiTestCase,这个类这个类继承自TestCase,并在它的基础上对OSGI中应用到的一些方法进行了封装,比如getBundle,getContext,getServiceObjects等,方便在写测试代码时获取bundle或是服务的一些信息。(3)在测试之前,要对测试代码所在工程的pom文件中进行如下信息的配置:1)添加测试时所需的依赖。测试时所要用到的bundle通过添加依赖的方式添加到pom文件中,其中loong-junit4osgi、loong-dservice-metadata为必须添加的依赖。具体操作如下:org.trustie.loong.modules.loong-dserviceloong-junit4osgi0.1.0-SNAPSHOTorg.trustie.loong.modules.loong-dserviceloong-dservice-metadata0.1.0-SNAPSHOT2)配置所需的插件,必须配置loong-junit4osgi-plugin插件,如果对声明式服务进行测试时必需配置loong-dservice-plugin插件,具体操作如下:org.trustie.loong.modules.loong-dserviceloong-junit4osgi-plugin0.1.0-SNAPSHOTtestloongorg.trustie.loong.modules.loong-dserviceloong-dservice-plugin0.1.0-SNAPSHOTdservice-bundle其中在configuration中配置的框架为测试执行的框架,目前支持loong和Felix这两种。3)在测试工程中写的TestSuite类也必须在pom中配置,TestSuite类的作用是将所有的测试类都添加进来,配置后就可以执行每一个测试类,TestSuite的写法如下:public class ServiceTestSuite extends TestSuite public static Test suite(BundleContext bc) OSGiTestSuite ot = new OSGiTestSuite(Service Test Suite, bc); ot.addTestSuite(SimpleTest.class); ot.addTestSuite(TestClass.class); ot.addTestSuite(TestProps.class); ot.addTestSuite(TestPropReconfigure.class);return ot;在pom中的配置如下:erfaces$pom.artifactIdtest.suit,erfaces.impltest.suit.ServiceTestSuite在配置完上述信息后就可以进行测试了,测试时在bundle的构件过程中执行的,可以直接在eclipse环境下对bundle打包,然后在控制台可以得出测试的结果;也可以在Dos下使用maven命令执行测试,如:mvn install。执行后会在当前bundle的target目录下生成安装的bundle和测试报告。注:在测试时有几个常用的maven命令mvn clean integration-test -DlogService=false 设置日志服务;mvn clean install -Dmaven.test.skip=true 略过测试;mvn clean install -Dmaven.test.failure.ignore=true 当测试出现失败不中断。3. 简单例子演示(1)新建一个maven工程:test.with.junit4osgi,在pom文件中配置好所需的依赖和插件。(2)在srcmainjava目录下定义好服务接口和接口的实现类(也就是构件实现类)。定义的接口和实现类如下:public interface Foo boolean foo();Properties fooProps();Boolean getObject();boolean getBoolean();int getInt();String getString();实现类:public class FooImpl implements Foo private int intProp;private String strProp;private String strAProp;private int intAProp;private boolean boolProp;public boolean foo() return boolProp;public Properties fooProps() Properties p = new Properties();p.put(intProp, new Integer(intProp);p.put(boolProp, new Boolean(boolProp);p.put(strProp, strProp);p.put(strAProp, strAProp);p.put(intAProp, intAProp);return p;public boolean getBoolean() return true;public double getDouble() return 2.1;(3)在srcmainresources目录下新建一个元数据文件metadata.xml,具体配置如下:(4)在srcmainjava目录下新建一个package,里面放置测试声明式服务的测试类,测试类都是继承于OSGiTestCase,都是使用断言的形式对注册服务、引用服务等来测试,下面是是一个简单的测试类:public class TestProps extends OSGiTestCase DserviceHelper helper = null;public void setUp() helper = new DserviceHelper(this);String type = FooProvider;helper.createComponentInstance(type, FooInstance);public void tearDown() helper.dispose();/测试属性关联字段且设置valuepublic void testProperty1() ServiceReference sr = helper.getServiceReferenceByName(Foo.class.getName(), FooInstance);/ 测试引用服务assertNotNull(The reference service is null, sr);/ 引用服务属性Integer intProp = (Integer) sr.getProperty(int);String strProp = (String) sr.getProperty(string);int intAProp = (int) sr.getProperty(intAProp);String srtProps = (String) sr.getProperty(strAProp);assertEquals(The int is not equals, intProp, new Integer(2);assertEquals(The String is not equals, strProp, new String(foo);assertNotNull(The stringArrays is null, srtProps);String v = new String foo, bar ;for (int i = 0; i srtProps.length; i+) if (!srtPropsi.equals(vi) fail(The two arrays not equals);assertNotNull(The int array is null, intAProp);int i = new int 1, 2, 3 ;for (int j = 0; j intAProp.length; j+) if (intAPropj != ij) fail(The two int arraya not same);Foo foo = (Foo) getServiceObject(sr);assertTrue(invoke service failed, foo.foo();在测试类里面我们定义了两个方法setUp和tearDown,其中setUp,负责初始化测试方法所需要的测试环境(如:创建构件实例、获取构件工厂),tearDown在每个测试方法被调用之后被调用,负责撤销测试环境(如:清除已创建了的构件实例);以上的两个方法都用到了一个帮助工具类DserviceHelper,通过它我们可以得到构件实例(getInstanceByName)、创建构件实例(createComponentInstance)、获得构件工厂(getFactory)、得到服务对象(getServiceObject)等等。测试类写好后,把他们都加入到ProvideTestSuite中,操作如下:public class ProvideTestSuite extends TestSuite public static Test suite(BundleContext bc) OSGiTestSuite ots = new OSGiTestSuite(Provided Service Test Suite, bc); ots.addTestSuite(TestProps.class);return ots;(5)构建已经创建好的工程,当测试类中所有断言语句的结果都正确时,此bundle会构件成功,会有如下的输出结果:当测试类中有断言语句不正确时,此bundle会构件失败,如上面测试类中assertEquals(The int is not equals, intProp, new Integer(2);将2改为3时,会有如下输出结果:且在targetsurefire-reports目录下的TEST-Provided_Service_Test_Suite.xml文件中有如下错误信息: junit.framework.AssertionFailedError: The int is not equals expected:<2> but was:<3>at junit.framework.Assert.fail(Assert.java:47)at junit.framework.Assert.failNotEquals(Assert.java:282)at junit.framework.Assert.assertEquals(Assert.java:64)at test.suit.TestProps.testProperty1(TestProps.java:52)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)注:工具类DserviceHelper里的方法详解 public static ComponentInstance createComponentInstance(Bundle bundle,String factoryName, Dictionary configuration)从给定的bundle中指定的工厂中,以给定的配置信息创建一个新的构件实例。 public static ComponentInstance createComponentInstance(Bundle bundle,String factoryName, String instanceName, Dictionary configuration)从给定的bundle中指定的工厂中,以给定的配置信息和名称创建一个新的构件实例。 public static ComponentInstance createComponentInstance(DServiceContext serviceContext, String factoryName,String instanceName)从给定的服务上下文中指定的工厂中,以给定的名称创建一个新的构件实例(包括空配置)。 public static ComponentInstance createComponentInstance(DServiceContext serviceContext, String factoryName,Dictionary configuration)从给定的服务上下文中指定的工厂中,以给定的名称创建一个新的构件实例。 public static ComponentInstance createComponentInstance(DServiceContext serviceContext, String factoryName,String instanceName, Dictionary configuration)从给定的服务上下文中指定的工厂中,以给定的名称和配置信息创建一个新的构件实例。 public ComponentInstance createComponentInstance(String factoryName,String instanceName)从本地bundle指定的工厂中,以给定的名称(和空配置信息)创建一个新的构件实例。 public ComponentInstance createComponentInstance(String factoryName,Dictionary configuration)从本地bundle指定的工厂中,以给定的配置信息创建一个新的构件实例。 public ComponentInstance createComponentInstance(String factoryName)从本地bundle指定的工厂中,以空配置信息创建一个新的构件实例。 public ComponentInstance createComponentInstance(String factoryName,String instanceName, Dictionary configuration)从本地bundle指定的工厂中,以给定的名称和配置信息创建一个新的构件实例。 public static AspectComponentFactory getHandlerFactory(Bundle bundle,String factoryName)返回一个在bundle中给定名称的方面工厂。 public static Object getServiceObject(DServiceContext serviceContext,String itf, String filter)返回一个注册在服务上下文中的服务对象, 提供指定的接口和给定的名称。 public stati
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 习作:写信(教学设计)-2024-2025学年语文四年级上册统编版
- 内蒙古开鲁县高中生物 第四章 细胞的物质输入和输出 4.1 物质跨膜运输教学设计 新人教版必修1
- 五年级下册英语教案-Unit 3 Review |冀教版(三起)
- 九年级历史下册 第3课 凡尔赛-华盛顿体系的建立教学设计 岳麓版
- 人教部编版八年级下册茅屋为秋风所破歌教学设计及反思
- 安全生产环保年度培训
- 大疆无人机培训内容
- 人教部编版七年级历史上第14课 沟通中外文明的“丝绸之路”教学设计
- 人教部编版三年级上册8 卖火柴的小女孩教学设计及反思
- 2024内蒙古呼伦贝尔经济技术开发区城市建设投资集团有限责任公司公开招聘8人笔试参考题库附带答案详解
- 2024年司法考试历年真题答案
- 2025年南昌市高三语文二模检测试卷附答案解析
- 八颗行星课件-科学六年级下册教科版
- 2025年上半年福建福州平潭综合实验区文旅发展集团限公司招聘11人易考易错模拟试题(共500题)试卷后附参考答案
- 2025湖南长沙振望投资发展有限公司招聘8人笔试参考题库附带答案详解
- 承插型盘扣式钢管脚手架安全技术标准JGJT231-2021规范解读
- 企业安全风险分级管控和隐患排查治理工作指南
- 2025年安阳职业技术学院单招职业技能测试题库有答案
- DB33 1121-2016 民用建筑电动汽车充电设施配置与设计规范
- 语文版一年级下册语文阅读理解练习(15篇)
- 北京市第一○一中学2023-2024学年八年级下学期期中英语试题
评论
0/150
提交评论