OSGi教程 – 11 – 使用JUnit来测试Bundle

11.1 入口说明

在Eclipse RCP版中提供了基于JUnit的插件测试工具,可以通过“Run->Run Configurations”菜单或”Run->Debug Configurations“菜单进入,也可以通过快捷工具栏的绿色运行图标或虫子调试图标进入,如下图:

20161231_001

通过”Junit Plug-in Test”项的右键菜单中的“New”菜单项可以创建一个新的配置,这个与我们之前使用的OSGi Framework配置很像,只是为了配合JUnit的使用提供了对应的配置项,主要包括Test、Main、Plug-ins三个选项卡,下面我将分别进行简要说明。

1) Test选项卡

Test选项卡主要用于定义测试范围、选择JUnit版本以及测试用例的运行模式。

20161231_002

下面对其主要内容进行分别说明:

● “Run a single test”选项:如果选中此选项则可以精确定义需要运行的测试工程(Project)、测试类(Test class)和测试方法(Test method)。

● “Run all tests in the selected projects,package or source folder”选项:如果选中此选项则会自动运行对应工程中的所有JUnit测试。

● “Test runner”选项:可以选择运行测试用例时所使用的JUnit版本。

● “Keep JUnit running after a test run where debugging”选项:如果未勾选则在测试平台运行完毕后会自动退出;勾选后如果在Debug状态下,当测试用例运行完毕后,不会自动结束OSGi平台运行,以便于观察某些服务运行状态。

● “Run in UI thread”选项:测试用例可以分为两大类,带有UI的测试用例(UI Tests,一般是Eclipse插件项目)以及无UI的测试用例(Headless Tests,一般是OSGi服务项目),此选项卡用于区分对应的测试用例类型。

如果是带有UI的测试用例,则会在运行测试用例时先运行一个Eclipse实例,因此要注意在“Plug-ins”选项卡中添加Eclipse UI相关的插件;如果是无UI的测试用例则不需要。

2) Main选项卡

Main选项卡主要用于定义启动方式。

20161231_003

下面对其主要内容进行分别说明:

● Workspace Data:用于定义测试工作空间的数据存放位置,以及是否需要在每次运行前进行自动清理。其中的值一般选择默认值,如果需要修改Location,则需要注意确保与Eclipse的当前工作空间不要一致,因为测试用例需要运行在一个沙盒之中,不能与现有工作空间有关系。

● Program to Run:用于定义运行测试用例的平台。

如果选择“Run a product”选项,则需要从所有的产品ID(由org.eclipse.core.runtime.products 扩展点定义)中选择测试用例的运行平台。

如果选择“Run an application”选项,则需要从所有的应用ID(由org.eclipse.core.runtime.applications扩展点定义)中选择测试用例的运行平台。需要注意的是,如果我们的测试目标是普通OSGi服务,则不需要UI支持,即不用在Test选项卡中勾选“Run in UI thread”项。如上图所示,我们一般选择“[No Application]-Headless Mode”选项。

● Java Runtime Environment:选择运行测试用例的Java环境。

3) Plug-ins选项卡

Plug-ins选项卡主要用于选择需要运行的插件清单。该选项卡与OSGi Framwork配置中的Bundles选项卡很像,这里就不再赘述。

11.2 测试样例

下面我们创建一个简单的OSGi服务测试用例。

1) 创建简单服务样例Bundle

为了便于演示,可以创建一个名为JunitTest的Bundle,在选择模板时选择“OSGi Simple LogService”,如下图所示:

20161231_004

工程创建完毕后,再创建一个Run Configuration,确保以下Bundle是被勾选的:

20161231_005

如果一切顺利你的工作空间运行起来应该是如下图所示:

20161231_006

2) 创建测试用例

在JUnitTest工程上点击鼠标右键,从弹出菜单中选择“New”菜单项,然后从弹出对话框中选择Java->JUnit->JUnit Test Case选项,如下图:

20161231_007

 

然后在下一步输入测试用例名称:SimpleTest,如下图所示:

20161231_008

点击“Finish”按钮后,Eclipse会提示你添加JUnit相关的Bundle,选择“OK”,如下图:

20161231_009

创建完毕后,你的工作空间看起来应该如下图所示:

20161231_010

3) 创建运行配置

参考上一节《入口说明》的内容,创建一个名为JUnitTest的配置。

由于我们不需要在调试结束后进行其他操作,并且待测试的服务也无需UI,因此在Test选项卡中无需勾选对应选项,在如下图所示:

20161231_011

Main选项卡内容如下图所示:

20161231_012

Plug-ins选项卡中需要确保对应的Bundle被正确勾选,如下图所示:

20161231_013

从上图可以看出,要确保JUnit的正常运行,需要添加hamcrest以及Eclipse平台相关的Bundle。如果你未正确勾选这些Bundle,在后续运行时应该会得到相关错误提示。

4) 运行测试用例

通过点击右下角的“Run”按钮,可以运行对应的测试用例,如下图所示:

20161231_014

由于测试尚未实现对应的测试用例,此时你看到的结果应该如下图所示(需要将JUnit视图打开):

20161231_015

从上图中可以看出,对应的单元测试已经正常执行了,这也意味着我们可以编写一般的测试用例开展工作。

下面我们来讨论如何获取OSGi服务来进行测试。

5) 在测试用例中获取OSGi服务

将SimpleTest的代码修改为如下所示,注意通过FrameworkUtil工具类获得BundleContext,进而获取OSGi服务:

再次运行名为JUnitTest的JUnit Plug-ins测试配置,你的工作空间应如下所示:

20161231_016

现在你应该知道如何在OSGi环境中使用JUnit啦,祝你好运。

打赏一下
支付宝
微信
除非注明,博客文章均为原创,转载请标明文章地址
本文地址: http://www.javafxchina.net/blog/2016/12/osgi-11-junit/
百度已收录
  1. Pingback: 新闻快报(2016-12-31) | JavaFX中文、OSGi、Eclipse开源资料