IntelliJ Platform SDK DevGuide

Test Project and Testdata Directories

测试夹具创建一个测试项目环境. 除非您自定义项目创建,否则测试项目将有一个模块,其中一个源根名为src. 测试项目的文件存在于临时目录或内存文件系统中,具体取决于[TempDirTestFixture]的实现(upsource:///platform/testFramework/src/com/intellij/testFramework/fixtures 使用/TempDirTestFixture.java).

LightPlatformCodeInsightFixtureTestCase使用内存实现; 如果通过调用IdeaTestFixtureFactory.createCodeInsightFixture来设置测试环境,则可以指定要使用的实现.

在您的插件中,您通常会在testdata目录中存储测试的测试数据(例如将在其上执行插件功能的文件和预期的输出文件). 这只是插件内容根目录下的一个目录,但不在源根目录下. testdata中的文件通常不是有效的源代码,不得编译.

要指定testdata的位置,必须覆盖LightPlatformCodeInsightFixtureTestCase.getTestDataPath()方法. 默认实现假定作为 IntelliJ Platform 源代码树的一部分运行,不适用于第三方插件.

要将文件或目录从testdata目录复制到测试项目目录,可以使用[CodeInsightTestFixture]中的copyFileToProject()copyDirectoryToProject()方法(upsource:///platform/testFramework/ src/com/intellij/testFramework/fixtures/CodeInsightTestFixture.java)类.

插件测试中的大多数操作都需要在内存编辑器中打开文件,其中将执行突出显示,完成和其他操作. 内存编辑器实例由CodeInsightTestFixture.getEditor()返回. 要将文件从testdata目录复制到测试项目目录并立即在编辑器中打开它,可以使用CodeInsightTestFixture.configureByFile()configureByFiles()方法. 后者将多个文件复制到测试项目目录,并在内存编辑器中打开它们的* first *.

或者,您可以使用其他方法之一,这些方法带有用@@ TestDataFile注释的参数. 这些方法将指定文件从testdata目录复制到测试项目目录,打开内存编辑器中的第一个指定文件,然后执行请求的操作,如突出显示或代码完成.

在内存编辑器中打开文件时,文件内容中的特殊标记可用于指定插入符号位置或选择. 您可以使用以下标记之一:

  • <caret>指定插入符号的位置.

  • <selection></selection>指定要选择的文本范围的开始和结束.

  • <block></block>指定列选择的起点和终点.

Last modified: 11 May 2019