插件测试¶
IntelliJ Platform 插件测试更偏向模型级功能测试,而不是孤立单元测试。测试通常启动轻量 IDE 环境,使用真实平台组件加载文件、执行功能,再比较结果。
测试思路¶
常见测试输入和输出:
- 输入文件:放在
testData。 - 光标位置、选区、高亮:用特殊标记写在测试文件中。
- 期望结果:使用
.after文件或直接断言。 - 测试主体:继承平台测试基类或使用测试夹具。
这种方式运行比普通单元测试慢,但能覆盖插件与平台 API 的真实交互。
Gradle 测试依赖¶
dependencies {
intellijPlatform {
testFramework(org.jetbrains.intellij.platform.gradle.TestFrameworkType.Platform)
}
}
如果测试 Java PSI、Java Inspection 等能力,仍然要声明 Java 插件依赖:
dependencies {
intellijPlatform {
bundledPlugin("com.intellij.java")
}
}
测试目录建议¶
src/test/kotlin/
com/example/MyInspectionTest.kt
src/test/testData/
inspection/
Before.java
After.java
Fixture 测试示例¶
class MyInspectionTest : LightJavaCodeInsightFixtureTestCase() {
override fun getTestDataPath(): String {
return "src/test/testData"
}
fun testWarningAndQuickFix() {
myFixture.enableInspections(MyStringComparisonInspection())
myFixture.configureByFile("inspection/Before.java")
myFixture.checkHighlighting()
val action = myFixture.findSingleIntention("Replace with equals()")
myFixture.launchAction(action)
myFixture.checkResultByFile("inspection/After.java")
}
}
应该测试什么¶
- Action 在不同上下文下是否启用。
- Inspection 是否在正确位置报问题。
- Quick Fix 是否生成预期代码。
- Completion 是否返回正确候选项。
- Reference 是否能 resolve、rename、find usages。
- 对不同 IDE 版本的兼容性。
不建议大量 mock¶
平台官方文档不推荐把 IntelliJ Platform 组件大量 mock 掉。插件代码往往依赖真实项目模型、PSI、VFS、索引和扩展点;过度 mock 会让测试失去价值。