公司介绍 产品展示 业务支持 解决方案 文档资料
网站导航 访客留言 技术论坛
     
     
  产品资料
  业界动态
  JAVA技术


首  页 > 文档资料 > 产品资料  
 
  IntelliJ IDEA插件开发之JUnit篇

在进行IDEA的插件开发时,我们一直希望插件能够象普通Java应用一样可以进行JUnit测试,这样我们就不需要在重新启动一个新的IDEA进行相关的功能测试。但是现实往往却不是如此,如果想通过JUnit完成测试,我们必须模拟(Mock)一个IDEA运行的环境,这样我们的测试才能进行下去。IDEA在3.0以后版本都提供了这样的功能,这就是IDEA的TestFrameWork,可能没有相关的文档介绍,不为大家了解,在这里我们向大家讲解一下。

IDEA的插件开发中,有几个比较关键的对象,分别是Project、Module、PsiManager和Editor,在IDEA的TestFrameWork中,提供了这些对象的模拟实现,这样我们编写的代码就很容易被测试。下面我们就开始IDEA的TestFrameWork的测试之旅吧。

1 打开IDEA 5.0,新建一个项目,然后添加一个Plugin模块。项目创建完毕后打开设置面板的“Paths”选项对模块进行设置,这里主要添加测试源码目录和测试代码输出目录,最后我们还要在模块的“Libraries(Classpath)”标签栏添加以下开发包至模块的Classpath中:
<IDEA_HOME>/lib/idea.jar
<IDEA_HOME>/plugins/cvsIntegration/lib/cvsIntegration.jar
<IDEA_HOME>/plugins/weblogicIntegration/lib/weblogicIntegration.jar
<IDEA_HOME>/plugins/tomcat/lib/tomcat.jar

设置如下图:注意:“D:/develop/IntelliJ-3245/”为IDEA的主目录,你需做相应的更改。

2 在测试源码目录下,新建一个类,如DemoTest,继承LightIdeaTestCase父类,LightIdeaTestCase由IDEA的TestFrameWork提供,通过继承LightIdeaTestCase父类,我们可以利用TestFrameWork提供的许多功能。LightIdeaTestCase主要提供IDEA的基本功能,如提供Project,Module,PsiManager对象,如果你想测试PSI相关的代码,你最好继承LightCodeInsightTestCase,这点我们在后面再做讲解。

3 相关设置:在运行JUnit的TestCase之前,我们需要进行相关的设置。点击“Run | Edit Configurations”,在“Run/Debug Configurations”对话框的JUnit标签栏点击“Edit Defaults”按钮,编辑运行测试用例的默认参数,在“JUnit Default Settings”设置窗口的“VM parameters”栏输入“-Xbootclasspath/p:D:/develop/IntelliJ-3245/lib/boot.jar”,最后确认所有操作。“D:/develop/IntelliJ-3245/”为IDEA的主目录,你需做相应的更改。

4 运行测试JUnit的TestCase,我们只需在编辑窗口右击鼠标,在弹出的窗口选择测试方法或整个测试用例,最简单的就是按下“Ctrl+Shift+F10”快捷键即可,在输出窗口我们就可以看到运行结果啦。

5 关于LightCodeInsightTestCase类,该类主要围绕PSI相关的操作,相当于操作Editor窗口打开的文件,你可以通过configureByFile(java.lang.String filePath)方法设置欲操作的文件,这里有个主要的事项就是filePath是相对于%IDEA_HOME%/\testData目录的,所以你要测试的文件必须存在IDEA安装目录下的testData目录。如filePath的名称为“/net/jetmaven/Demo.java”,实际的路径就为“%IDEA_HOME%\testData\net\jetmaven\Demo.java”,这点希望大家能注意点。因为项目的存放路径和IDEA的安装目录是完全不一样的,如果你想在IDEA快速编辑这些数据文件,你可以点击设置面板的“Paths”选项,在模块的“Paths”标签栏,点击“Add Content Roots”按钮,将%IDEA_HOME%/\testData目录添加为模块的Content Root,在“Project”工具窗口就会添加该目录,这样你编辑和管理数据文件就方便多啦。

总结:IDEA的TestFrameWork功能不是非常强大,不能涵盖到测试的各个方面,如图形、鼠标操作、键盘操作等,但是对插件核心功能的测试却是非常有用的,只要将相关的接口设计好,TestFrameWork完全可以满足你的需求,至于相关的外围测试,如事件触发、图形等方面,那全部是IDEA本身完成,你完全可以放心,你只需关心插件的核心功能即可,相信通过TestFrameWork可以减轻你的测试工作劳动量,让你的开发愉悦起来。

IDEA TestFrameWork API,点此下载