我想在继续开发代码的同时为Eclipse RCP编写JUnit测试。在启动应用程序时,不同的插件初始化各种插件/类的变量(主要在其启动方法中),这些是正确功能所需的。 如果没有发生这种初始化,则无法测试代码,因为它取决于这些值。
如何在不创建大量虚拟值的情况下解决此问题? 测试Eclipse RCP的一般方法是什么?
答案 0 :(得分:7)
您遇到了一个常见问题:依赖项过多。你需要削减它们。
使用Eclipse 3,这有点难。尝试将代码拆分为依赖于运行的Eclipse平台和其他所有内容的东西。 Eclipse经常使用接口,因此您可以使用mocks来测试很多东西。
使用e4,事情变得更加简单,因为会注入许多服务,使得模拟和测试变得更加容易。
但目标必须始终是拥有尽可能多的代码,而不依赖于SWT或平台。如果必须,创建自己的接口。运行时imlement只是包装Eclipse代码。对于测试,您可以使用模拟来模拟Eclipse运行时。
答案 1 :(得分:4)
您可以使用JUnit plugintest运行测试,这将启动插件框架并允许测试插件。但这通常只能解决一些问题。最好的建议是Aaron建议尽可能地将功能分开到所有实际代码都只是普通旧java对象的地方。 Eclipse的所有依赖项都在不同的类中,并尽可能保持较薄,以便它们不需要测试。
这可能很难实现,因此可能需要进行模拟。我有时采用的另一个技巧是使用Java反射来更改私有字段的值,see this question