我构建的软件是基于SWT的RCP应用程序。我有一些单元测试,一切都在Jenkins CI上正常运行,直到我从SWT lib添加类到测试。构建失败并显示消息:
Could not load SWT library. Reasons:
no swt-gtk-4430 in java.library.path
no swt-gtk in java.library.path
Native Library /var/lib/jenkins/.swt/lib/linux/x86_64/libswt-gtk-4430.so already loaded in another classloader
Can't load library: /var/lib/jenkins/.swt/lib/linux/x86_64/libswt-gtk.so
是否有人遇到同样的问题,并且如何规避?
例如:我想编写测试,检查一些复杂的SWT组合以正确的方式组合在一起。
更新
一个简单的示例测试:
public class FooTest {
private Composite parent = new Composite(new Shell(), SWT.NONE);
private PartFactory sut = new PartFactory();
@Test
public void createPart() {
final MPart part = sut.create(parent);
...
}
}
我知道我可以嘲笑Shell
或Composite
。这适用于我的一些组件。但在某些情况下,这不是一种选择。如何在没有上述错误的情况下使用SWT类。在IDE中的Windows上,测试工作正常。但它在Linux上的Jenkins上失败了。
POM不是很特别。测试使用Surefire执行:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<executions>
<execution>
<id>test</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
</plugin>