通过前面的4篇,我相信你已经成功的用Tycho build出你的第一个RCP可执行程序了。这一篇我们来介绍一下Tycho对Junt的集成。
废话不多说,在Tyhco中对Junit的集成是通过tycho-surefire-plugin插件来实现的。从插件的名字上来看很像Maven里的surefire插件。但其实Tycho的surefire和Maven的surefire还是有一些差别的,这里的差别主要体现在生命周期上。tycho-surefire-plugin插件是在integration-test phase执行的,而maven-surefire-plugin插件是在test phase执行的。也许你对integration-test这个phase不太了解,其实这个pahse是位于我们经常做的package和install之间的。
对tycho-surefire-plugin插件有了一定的了解之后,我们就可以开始创建我们的Junit测试项目了。我们应当创建什么样的项目用来RCP的测试呢?针对于plugin项目的测试,在这里推荐的是Fragment Project。你也许会好奇为什么选择Fragment项目?原因有两点:
1. Fragment可以访问他的主plugin中的代码而不必去导出他们,因为他们本身就处在一个plugin当中,而且Fragment中的代码其实是是用主plugin的classloader来加载的。
2. 因为从外部来看Fragment和和主plugin项目其实是一个plugin,他们用的是一套的classloader,所以假如你的测试class和你主class是在一个包内,在我们的测试class当中甚至可以直接访问主class的私有方法。
我们通过eclipse的项目创建向导创建一个Fragment项目。因为我们测试的plugin是我们之前创建的com.chnic.tycho.mail.plugin,因此在这里我们的fragment的项目名取名为com.chnic.tycho.mail.plugin.test。在接下来的host plugin指定的对话框中我们指定com.chnic.tycho.mail.plugin作为host plugin
项目创建完成之后我们还是convert to Maven project。因为这是一个Junit测试项目,因此在这里我们的packaging设置成为eclipse-test-plugin
很显然,生成的pom文件会有错误,因为他识别不出来eclipse-test-plugin这种packaging方式。我们依然需要让他继承我们的parent项目的pom。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.chnic.tycho.mail</groupId> <artifactId>com.chnic.tycho.mail.parent</artifactId> <version>1.0.0-SNAPSHOT</version> <relativePath>../com.chnic.tycho.mail.parent/pom.xml</relativePath> </parent> <artifactId>com.chnic.tycho.mail.plugin.test</artifactId> <packaging>eclipse-test-plugin</packaging> </project>
转化成Maven项目之后,我们来添加一个junit test case。我们创建一个和host plugin一模一样的包名,然后在其之内创建一个PerspectiveTest测试类
package com.chnic.tycho.mail.plugin; import static org.junit.Assert.*; import org.junit.Test; public class PerspectiveTest { @Test public void testID() { assertEquals("com.chnic.tycho.mail.plugin.perspective", Perspective.ID); } }
创建完成之后我们会发现测试类报错了,那是因为我们没有把junit加到fragment项目的Require-Bundle里。ctrl+1修复编译错误。
Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Test Bundle-SymbolicName: com.chnic.tycho.mail.plugin.test Bundle-Version: 1.0.0.qualifier Bundle-Vendor: Nick Fragment-Host: com.chnic.tycho.mail.plugin;bundle-version="1.0.0" Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Require-Bundle: org.junit
所有的工作完成之后,我们要做的就是吧我们的测试项目添加到我们的聚合项目com.chnic.tycho.mail.build中去。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.chnic.tycho.mail</groupId> <artifactId>com.chnic.tycho.mail.parent</artifactId> <version>1.0.0-SNAPSHOT</version> <relativePath>../com.chnic.tycho.mail.parent/pom.xml</relativePath> </parent> <artifactId>com.chnic.tycho.mail.build</artifactId> <packaging>pom</packaging> <modules> <module>../com.chnic.tycho.mail.feature</module> <module>../com.chnic.tycho.mail.plugin</module> <module>../com.chnic.tycho.mail.product</module> <module>../com.chnic.tycho.mail.updatesite</module> <module>../com.chnic.tycho.mail.plugin.test</module> </modules> </project>
Build我们的com.chnic.tycho.mail.build项目,我们会发现Maven在build的时候控制台上多出了如下的信息
T E S T S
-------------------------------------------------------
Running com.chnic.tycho.mail.plugin.PerspectiveTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec - in com.chnic.tycho.mail.plugin.PerspectiveTest
testID(com.chnic.tycho.mail.plugin.PerspectiveTest) Time elapsed: 0 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] All tests passed!
控制的信息告诉我们,test case已经被执行,并且case是测试通过的。由于我们的测试fragment项目只会在integration-test phase被执行,并不会被打包到最终的product中,你在product的plugins的文件夹中也找不到相关的jar文件。
在这里还要额外的说一句,由于Tycho的surefire plugin是支持基于UI和不基于UI的测试的,如果你的test case是一个基于UI的test case,那么你需要在POM文件中,显示的指定useUIHarness为true。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.chnic.tycho.mail</groupId> <artifactId>com.chnic.tycho.mail.parent</artifactId> <version>1.0.0-SNAPSHOT</version> <relativePath>../com.chnic.tycho.mail.parent/pom.xml</relativePath> </parent> <artifactId>com.chnic.tycho.mail.plugin.test</artifactId> <packaging>eclipse-test-plugin</packaging> <build> <sourceDirectory>src</sourceDirectory> <plugins> <plugin> <groupId>org.eclipse.tycho</groupId> <artifactId>tycho-surefire-plugin</artifactId> <version>${tycho.version}</version> <configuration> <useUIHarness>true</useUIHarness> </configuration> </plugin> </plugins> </build> </project>
至此,我们也完成了Tycho对Junit的集成。com.chnic.tycho.mail.plugin.test项目代码,可以在附件中找到。在下一篇中会介绍Tycho的一些其他的有用的配置。
相关推荐
标题中的"tycho_build_RCP_app.rar.zip"表明这是一个使用Tycho构建的Eclipse RCP(Rich Client Platform)应用程序的源码压缩包,且文件格式是rar和zip的结合。RCP是Eclipse框架用于创建桌面应用的方式,而Tycho则是...
压缩包子文件的文件名“tycho_build_RCP_app”可能是一个示例项目,包含了一个使用Tycho构建的RCP应用程序的源代码和构建配置。通过分析这个项目,读者可以学习如何设置Tycho项目,如何定义依赖,以及如何执行构建...
一个用于Eclipse RCP应用程序(例如Virtual Satellite)的Maven Tycho演示项目。 项目状态 状态 用于开发构建。 状态 用于集成构建。 状态 为大师建造。 目的 该项目是使虚拟卫星开源的测试设置。 它有助于将软件...
__artifactId__.test : eclipse-test-plugin (Fragment project) | |---__artifactId__.site : eclipse-repository生成的插件基于PDE向导中的Hello World模板,使用Eclipse 3.x体系结构: [...] creates a simple ...
maven-tycho-plugin-0.10.0.jar
在IT行业中,RCP(Rich Client Platform)是一种用于构建桌面应用程序的框架,它源自Eclipse项目,提供了丰富的用户界面和强大的插件系统。RCP产品的开发者通常需要将他们的应用程序打包成可执行文件(exe),以便于...
问题似乎是在验证阶段执行tycho-packaging-plugin和buildnumber-maven-plugin目标的顺序:由于buildnumber-maven-plugin首先在POM中声明,因此应该先执行,如所述,并且作为,它应该已在Maven 3.0.3中生效(使用...
Eclipse Rich Client Platform (RCP) 是一个强大的框架,用于构建桌面应用程序,它基于Java语言并依赖于Eclipse IDE。这个“RCP经典实例”是一个由国外JAVA专家开发的示例项目,它演示了如何利用Eclipse RCP来创建一...
Xtext Tycho示例这是一个演示项目,显示了如何使用tycho / maven构建Xtext项目。 它具有以下特点: 项目基于Xtext和Xtend 2.7.3 在fornax mwe2插件的帮助下从Maven运行xtext生成器mwe2工作流程生成的文件未检入,...
这个测试项目是为了演示和帮助开发者理解如何有效地利用Tycho来构建、管理和测试Eclipse插件和RCP应用。 在Java开发环境中,Eclipse Tycho提供了一种强大的解决方案,它可以处理Eclipse插件和RCP项目的依赖关系,...
通过Tycho,你可以使用Maven的强大的依赖管理和构建流程来处理Eclipse插件的构建问题,避免了传统Ant脚本的复杂性。 ** Maven Tycho的核心概念 ** 1. **基于POM的构建**:Tycho遵循Maven的约定,使用Project ...
它扩展了 Maven 的生命周期,使其能够处理 Eclipse 描述符文件(如 `.plugin.xml`, `.features.xml`)和构建 Eclipse 插件、RCP 应用程序、产品配置等。Tycho 可以在不使用 Eclipse IDE 的情况下,基于 Maven 构建...
maven-tycho-plugin-0.11.1.jar
maven-tycho-plugin-0.11.0.jar
maven-tycho-plugin-0.9.0.jar
maven-tycho-plugin-0.8.0.jar
maven-tycho-plugin-0.7.0.jar
maven-tycho-plugin-0.6.0.jar
maven-tycho-plugin-0.5.0.jar
这篇博文将深入探讨如何使用Eclipse IDE和Equinox框架来开发OSGi Bundle应用。 **OSGi基本概念** 1. **Bundle**:OSGi的核心单元,类似于Java的JAR文件,但包含了额外的元数据,描述了其依赖和其他模块的关系。 2....