我第一次进行除简单JUnit测试以外的任何测试。我在一个非常古老的EJB2.0 Ant项目上设置了Arquillian,我在这里遇到了死路。
使用Arquillian设置:
@Deployment
public static Archive<?> createDeployment() {
JavaArchive jar = ShrinkWrap.create(JavaArchive.class)
.addPackages(true, "com.admin", "com.framework", "com.pharmacy")
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class)
.as(ZipImporter.class)
.importFrom(new File("C:\\jboss-4.2.3.GA\\server\\default\\administration.ear"))
.as(EnterpriseArchive.class);
ear.addAsLibrary(jar);
return ear;
}
我能够点击容器,获取数据源并查询表。但是,如果我正在运行使用依赖于其他JAR的代码的测试,或者测试代码本身依赖于其他JAR,那么我将获得ClassNotFoundException。
例如,在我的测试用例中,我正在尝试使用httpclient-4.5.2.jar
和httpcore-4.4.4.jar
发出HTTP请求,然后我在Eclipse junit测试控制台中获得Caused by: java.lang.ClassNotFoundException: No ClassLoaders found for: org.apache.http.protocol.HttpContext
。我在Eclipse类路径中有这些jar,当我使用Codehaus Cargo框架运行相同的HTTP测试时,它正在工作。
另一个例子,我正在初始化一个类实例,这个类实例使用apache的vfs2 jar进行sftp调用。然后我在jboss server.log中发现了这个错误:Caused by: java.lang.ClassNotFoundException: No ClassLoaders found for: org.apache.commons.vfs2.FileSelector
我做错了什么?
答案 0 :(得分:0)
由于Arquillian是一种隔离,我想你需要在Java档案中包含外部类。
JavaArchive jar = ShrinkWrap.create(JavaArchive.class)
.addPackages(true, "com.admin", "com.framework", "com.pharmacy")
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml")
//
// You need to include to external classes used
// in your Java archive using addClass / addClasses
//
.addClasses(ExtA.class, ExtB.class)
//
// or the entire package if needed
//
.addPackage(true, "my.ext.package");
然后部署应该有效。