OSGi Testsuite:引入类名过滤器

OSGi Testsuite是一个JUnit测试运行程序 ,它动态地收集要执行的测试类。 它已经由我的同伴Rüdiger大约一年前出版,并且已经在某些项目中证明是有用的。 但是对于gonsole,我们必须使用一个难看的补丁,因为1.0版仅支持.*Test后缀匹配测试类名称。

我通过引入注解@ClassnameFilters (使用正则表达式匹配任意名称模式)解决了1.1版的问题。 这篇文章简短地解释了它是如何工作的。

OSGi测试套件

OSGi Testsuite提供了一个JUnit测试运行程序BundleTestSuite ,可用于运行给定数量的OSGi捆绑包内的所有测试。 要使用它,请使用@RunWith(BundleTestSuite.class)注释一个类,并使用@TestBundles({"bundle.1", ...})指定捆绑。 运行时,JUnit将处理列出的捆绑软件中的所有类,其名称以'Test'结尾。

@RunWith( BundleTestSuite.class )
@TestBundles( { "org.example.bundle1", "org.example.bundle2" } )
public class MasterTestSuite {}

不幸的是,Test postfix的固定结果显得过于僵化。 在gonsole中,我们对单元测试和集成测试使用不同的后缀。 而且,我们不希望在OSGi Testsuite运行中执行单元测试。 但是这种区别在1.0版中是不可能的。

类名过滤器

ClasspathSuite (在纯JUnit测试上与OSGi Testsuite的工作原理类似)的启发,我引入了一个注解@ClassnameFilters 。 这允许基于正则表达式定义过滤器以匹配任意测试名称模式:

@RunWith( BundleTestSuite.class )
@TestBundles( { "org.example.bundle1", "org.example.bundle2" } )
@ClassnameFilters( { ".*ITest" } )
public class IntegrationTestSuite {}

处理该示例将包括列出的捆绑软件中所有类的测试,这些测试的名称以'ITest'后缀结尾。 请注意,带有简单'Test'后缀的类将不被处理。

此外,可以使用前导'!'指定排除模式 :

@RunWith( BundleTestSuite.class )
@TestBundles( { "org.example.bundle1", "org.example.bundle2" } )
@ClassnameFilters( { ".*ITest", "!.*FooITest" } )
public class IntegrationTestSuite {}

给定的示例现在将执行列出的捆绑软件中所有类的测试,这些类的名称以'ITest'后缀结尾,但名称以'FooITest'结尾的类除外。 很简单,不是吗?

结论

OSGi Testsuite的过滤器机制得到了增强,可以动态执行与任意名称模式匹配的测试类。 使用ClassnameFilters批注和正则表达式可以轻松完成过滤器规范。

该代码可在Eclipse Public License获得,并托管在GitHub上:

https://github.com/rherrmann/osgi-testsuite

可以从此p2存储库获得最新的稳定版本:

http://rherrmann.github.io/osgi-testsuite/repository

翻译自: https://www.javacodegeeks.com/2014/11/osgi-testsuite-introducing-classname-filters.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值