1

我们有一个使用 Eclipse RCP 创建的项目,我们正在使用 SWTBot ( http://wiki.eclipse.org/SWTBot ) 对其进行 GUI 测试。

现在我们想自动化这个测试运行。现在我们有运行所有构建的 ant 任务,所以我们希望 ant 也运行我们的 GUI 测试(根据http://wiki.eclipse.org/SWTBot/Ant#Ant)。

一切都很好,我们创建了一个 ant 任务,它使用我们导出的产品启动 OSGi 框架,启动 JUnit 无头执行,定位测试插件和测试类并运行测试套件 - 但它失败了。

它失败的原因是我们在测试中使用了 jmockit。根据指南(http://jmockit.googlecode.com/svn/trunk/www/gettingStarted.html),我们能够运行此测试以运行 Eclipse(通过将 jmockit 添加到全局类路径并将 -javaagent:jmockit.jar 添加到测试运行配置中的 VM 参数)但在 ant 任务中这样做(将 jvmarg 和 jmockit 添加到类路径)失败。

在测试运行期间使用此配置,我们得到以下异常

mockit/MockUp
java.lang.NoClassDefFoundError: mockit/MockUp
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
...
Caused by: java.lang.ClassNotFoundException: mockit.MockUp
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:494)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:398)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:105)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

之后我们 osgi-fied jmockit 并将其添加到我们的产品中,导致以下警告:

WARNING: JMockit was initialized on demand, which may cause certain tests to fail;
please check the documentation for better ways to get it initialized.

做了一点挖掘,我发现以下邮件交换:http ://code.google.com/p/jmockit/issues/detail ?id=203 和 rliesenf...@gmail.com 的最后评论说:

考虑到在这方面取得真正进展的异常困难(至少对我而言),以及我必须为此努力的一点动力(“Eclipse JUnit 插件测试”毕竟是一个小的“利基”环境),我要结束了现在这个。此外,在工具包的其他领域还有很多工作要做(即使不考虑 JMockit 2),所以很难证明花在这类东西上的时间是合理的。

我希望从那时起这个问题得到解决,或者至少找到了一些解决方法。

有人遇到过类似的问题并想分享他们的解决方案/建议吗?

4

0 回答 0