欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用Tycho来构建你的RCP程序(五) —— Plugin Unit Test

程序员文章站 2022-05-18 10:54:27
...

通过前面的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之间的。

写道
Package -> pre-integration-test -> integration-test -> post-integration-test -> verify -> install -> deploy

 

对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


使用Tycho来构建你的RCP程序(五) —— Plugin Unit Test
            
    
    博客分类: RCP RCPBuildMavenTychoJunit
 

项目创建完成之后我们还是convert to Maven project。因为这是一个Junit测试项目,因此在这里我们的packaging设置成为eclipse-test-plugin


使用Tycho来构建你的RCP程序(五) —— Plugin Unit Test
            
    
    博客分类: RCP RCPBuildMavenTychoJunit
 

很显然,生成的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来构建你的RCP程序(五) —— Plugin Unit Test
            
    
    博客分类: RCP RCPBuildMavenTychoJunit
  • 大小: 46.1 KB
  • 使用Tycho来构建你的RCP程序(五) —— Plugin Unit Test
            
    
    博客分类: RCP RCPBuildMavenTychoJunit
  • 大小: 36.5 KB