我们有一个用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添加到classpath中失败。
在测试运行期间使用此配置我们将得到以下异常
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)
之后,我们将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),因此很难证明花在这类东西上的时间。
我希望从那时起这个问题得到解决或者至少找到了一些解决方法。
任何人遇到过类似的问题并希望分享他们的解决方案/建议吗?