IntelliJ平台 代码库中的大多数测试是模型级功能测试。 这意味着:
- 测试运行在无图形界面环境中,除了一些UI组件外,这是大多数组件的真实运行环境;
- 测试通常整体测试一个特性,而不是其实现的单个函数;
- 测试不测试Swing UI,而是直接使用底层模型;
- 大多数测试使用源文件或一组源文件作为输入数据,执行一个功能,然后将输出与预期结果进行比较。 结果可以为另一组源文件,输入文件中的特殊标记,或直接在测试代码中。
这种测试方法的最大好处是测试非常稳定,并且一旦完成几乎无需维护,无论底层实现被重构或重写多少。
在内部经过大量重构,生命周期超过10年的产品中,我们发现这个好处大大超过了较慢的测试执行的缺点和比较孤立的单元测试更困难的故障调试。
我们的测试方法的另一个结果是我们的测试框架不提供:
- 我们不提供推荐的模拟方法。在我们的代码库中有一些使用JMock的测试,但是我们发现很难模拟你的插件类与IntelliJ平台 组件的所有相互作用,我们推荐使用真正的组件;
- 我们不提供Swing UI测试的通用框架。你可以尝试使用如FEST或Sikuli等工具测试插件UI,但是我们不使用它们且不提供任何使用指导。在内部,我们手动测试Swing UI。
签出这个分步教程,它会教你如何编写和运行自定义语言插件(包括源代码)的自动测试