Eclipse扩展的轻量级集成测试

最近,我为Eclipse扩展点评估引入了一个小助手。 辅助程序努力减少通用编程步骤的样板代码,同时增加开发指导和可读性。

这篇文章是希望的后续文章,展示了如何将实用程序与AssertJ定制断言结合使用,以编写针对Eclipse扩展的轻量级集成测试。

Eclipse扩展

在Eclipse中,松耦合是通过扩展点和扩展机制部分实现的。 因此,扩展充当对特定扩展点的贡献。 但是,扩展名和扩展点的声明性有时会导致出现问题,可能很难跟踪。

如果偶然删除了扩展声明,使用参数扩展了可执行扩展的默认构造函数,未将plugin.xml添加到build.properties可能是这种情况。

取决于PDE错误/警告设置,应该通过标记将许多此类问题告知他人,但是由于某种原因,它会一次又一次地发生,导致无法识别贡献,并且由于错误跟踪而浪费了宝贵的时间。

因此,进行轻量级集成测试以验证是否确实可以使用某个贡献可能会有所帮助。

有关如何使用扩展点机制扩展Eclipse的一般信息,您可以参考在线文档的《 插件开发环境指南 》。

与JUnit插件测试的集成测试

给定最后一个帖子的扩展点定义...

扩展点定义

…扩展贡献可能看起来像这样:

<extensionpoint="com.codeaffine.post.contribution"><contributionid="myContribution"class="com.codeaffine.post.MyContribution"></contribution></extension>

假设我们具有“使用片段测试插件”中所述的测试片段 ,我们可以引入PDETest来验证上面具有给定id的扩展是否存在并且可以由默认构造函数实例化。 此测试利用了上一篇文章介绍的RegistryAdapter和称为ExtensionAssert的特定自定义断言:

public class MyContributionPDETest {@Testpublic void testExtension() {Extension actual = new RegistryAdapter().readExtension( "com.codeaffine.post.contribution" ).thatMatches( attribute( "id", "myContribution" ) ).process();assertThat( actual ).hasAttributeValue( "class", MyContribution.class.getName() ).isInstantiable( Runnable.class );}
}

如前一篇文章所述, RegistryAdapter#readExtension(String)精确读取给定“ id”属性的一个扩展名。 如果它使用此属性检测到多个贡献,则将引发异常。

ExtensionAssert#assertThat(Extension) (通过静态导入使用)提供了一个AssertJ自定义断言,该断言提供了一些对扩展贡献的常见检查。 该示例验证了'class'属性的值与该贡献的实现类型的完全限定名称匹配,该可执行扩展实际上可以使用默认构造函数实例化,并且该实例可分配给Runnable

在哪里得到的?

对于那些想要签出的人,有一个P2存储库,其中包含com.codeaffine.eclipse.core.runtimecom.codeaffine.eclipse.core.runtime.test.util功能, 其中提供RegistryAdapterExtensionAssert 。 该存储库位于:

  • http://fappel.github.io/xiliary/

源代码和问题跟踪器托管在:

  • https://github.com/fappel/xiliary

尽管目前完全没有文档,但是应该很容易从本文和上一篇文章的说明开始。 但是请记住,这些功能还处于早期状态,可能会发生一些API更改。 特别是,嵌套扩展的断言目前似乎太弱了。

如果您有改进的想法或发现了一些错误,则问题跟踪器可能是处理此问题的最佳位置,其他任何地方都可以使用下面的评论部分。

翻译自: https://www.javacodegeeks.com/2014/11/lightweight-integration-tests-for-eclipse-extensions.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361387.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二:熟悉 TCP/IP 协议

一篇文章带你熟悉 TCP/IP 协议&#xff08;网络协议篇二&#xff09; 同样的&#xff0c;本文篇幅也比较长&#xff0c;先来一张思维导图&#xff0c;带大家过一遍。 一图看完本文 一、 计算机网络体系结构分层 计算机网络体系结构分层计算机网络体系结构分层不难看出&…

DOM操作案例之--全选与反选

全选与反选在表单类的项目中还是很常见的&#xff0c;电商项目中的购物车一定少不了这个功能。 下面我只就用一个简单的案例做个演示吧。 <div class"wrap"><table><thead><tr><th><input type"checkbox" id"j_cbA…

带有Swagger的Spring Rest API –公开文档

创建API文档后&#xff0c;将其提供给涉众非常重要。 在理想情况下&#xff0c;此发布的文档将具有足够的灵活性以解决任何最新更改&#xff0c;并且易于分发&#xff08;就成本以及完成此操作所需的时间而言&#xff09;。 为了使这成为可能&#xff0c;我们将利用我在上一篇文…

hinkphp项目部署到Linux服务器上报错“模板不存在”如何解决

检查了服务器上的文件&#xff0c;并没有缺少文件&#xff0c;再次上传文件到服务器&#xff0c;还是报错。莫名其妙&#xff0c;怀疑是代码问题。 仔细检查后&#xff0c;发现是模板的文件名问题&#xff1a; 用过TP的都知道&#xff1a;thinkphp会在$this->display()的时候…

Elements in iteration expect to have v-bind:key directives错误的解决办法

一、错误如下[eslint-plugin-vue][vue/require-v-for-key]Elements in iteration expect to have v-bind:key directives.Renders the element or template block multiple times based on the source data. 使用VS Code 出现如下问题&#xff0c;如图 二、解决 在用vscode编写…

无法使用JDK 8卸载JavaFX SceneBuilder 1.0

我最近从旧的基于Vista的笔记本电脑中删除了一些我曾经使用过的软件开发应用程序&#xff0c;工具和文件&#xff0c;因为主要使用该笔记本电脑的人们现在对软件开发不再感兴趣。 作为该工作的一部分&#xff0c;我尝试删除了几年前在该笔记本电脑上安装的JavaFX Scene Builder…

分享一个不错的表格样式

先贴个HTML生成的源码出来&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"> <head>…

如何将SQL GROUP BY和聚合转换为Java 8

我无法抗拒。 我已经阅读了Hugo Prudente在Stack Overflow上提出的问题 。 而且我知道必须有比JDK提供的更好的方法。 问题如下&#xff1a; 我正在寻找一个lambda来优化已检索的数据。 我有一个原始的结果集&#xff0c;如果用户不更改我想要的日期&#xff0c;则使用Java的…

zabbix监控docker容器

1、环境说明 由于最近zabbix进行过一次迁移&#xff0c;所以zabbix-server系列采用docker方式安装&#xff0c;参考zabbix官网&#xff1a;https://github.com/zabbix/zabbix-docker。为适应本地环境和需求&#xff0c;docker-compose.yml文件有改动&#xff0c;具体内容如下&a…

Hibernate应用程序级可重复读取

介绍 在我以前的文章中&#xff0c;我描述了应用程序级事务如何为长时间的对话提供合适的并发控制机制。 所有实体都在Hibernate会话的上下文中加载&#xff0c;充当事务后写式缓存 。 Hibernate持久性上下文可以包含给定实体的一个引用和一个引用。 一级缓存可确保会话级可重…

canvas动画简单操作

canvas动画 小球滚动效果 关键api&#xff1a; window.requestAnimationFrame(draw) 会递归调用draw函数&#xff0c;替代setIntervalvar x 20; var speed 4; //电脑的帧率是1秒钟60Hz&#xff0c; 就相当于一秒钟可以播放60张图片&#xff0c;就相当于播放一张图片使用16.…

使用PrimeFaces开发数据导出实用程序

我的日常工作涉及大量使用数据。 我们使用关系数据库来存储所有内容&#xff0c;因为我们依赖于企业级的数据管理。 有时&#xff0c;具有将数据提取为简单格式&#xff08;例如电子表格&#xff09;的功能很有用&#xff0c;以便我们可以按需进行操作。 这篇文章概述了我使用P…

Tomcat到Wildfly:配置数据库连接

此摘录摘自《 从Tomcat到WildFly 》一书&#xff0c;您将在其中学习如何将现有的Tomcat体系结构移植到WildFly&#xff0c;包括服务器配置和在其顶部运行的应用程序。 WildFly是完全兼容的Java Enterprise Edition 7容器&#xff0c;与Tomcat相比&#xff0c;它具有更多的可用…

在jOOQ之上构建的RESTful JDBC HTTP服务器

jOOQ生态系统和社区正在持续增长。 我们个人总是很高兴看到基于jOOQ构建的其他开源项目。 今天&#xff0c;我们非常高兴为您介绍BjrnHarrtell结合REST和RDBMS的一种非常有趣的方法。 BjrnHarrtell从小就是瑞典的程序员。 他通常在Sweco Position AB上忙于编写GIS系统和集成&a…

node.js 搭建http调取 mysql数据库中的值

首先&#xff0c;我们先在数据库中创建两个表t_news,t_news_type;插入数据&#xff1a; 然后我们再写代码&#xff1a; //加载模块express var express require("express"); var fs require("fs"); //加载路径 var url require("url"); //加…

NHibernate.3.0.Cookbook第三章第9节的翻译

Using stateless sessions 使用无状态会话 当进行大量数据处理的时候,可能会放弃使用一些高级特性,而使用更接近底层的API来提高性能.在NHibernate中,这种高性能的底层API就是无状态的会话.本节介绍如何使用无状态会话来更新movie对象的价格. 准备 使用第一章的Eg.Core和第二章…

致电以验证您的JavaFX UI的响应能力

最近&#xff0c;Jim Weaver在他的Surface Pro上为演示安装了我的小图片索引应用“ picmodo”&#xff0c;并且GUI变成了垃圾。 显然&#xff0c;Windows Tablet上JavaFX的基本字体大小很高&#xff1a; 我认为&#xff0c;即使调整大小行为和预期一样工作&#xff0c;UI也绝…

vuex 管理vue-router的传值

假设有这样的一种情况&#xff0c;在两个组件中。一个组件【A】主要是比如说放表格数据&#xff0c;而另外一个组件【B】是专门用来向组件A的表格添加数据的表单。这个时候就是两个兄弟组件之间传递数据了。首先想到的是使用兄弟组件传递数据的方法&#xff1a; 新建一个中间件…

c++ 错误处理

void __fastcall TForm1::Button1Click(TObject *Sender) { try { int iEdit1->Text.ToInt(); Edit1->TextAnsiString(10/i); } catch (...) { ShowMessage("Error"); } } 通过 为知笔记 发布转载于:https://www.cnblogs.com/xe2011/archive/2012/07/16/55298e…

前后端分手大师——MVVM 模式

阅读目录简而言之组成部分没有什么是一个栗子不能解决的简而言之 之前对 MVVM 模式一直只是模模糊糊的认识&#xff0c;正所谓没有实践就没有发言权&#xff0c;通过这两年对 Vue 框架的深入学习和项目实践&#xff0c;终于可以装B了有了拨开云雾见月明的感觉。 Model–View–…