Arquillian EJB 添加 mockito
Arquillian EJB adding mockito
我正在尝试将 mockito 添加到我的 arquillian 测试中(使用 ShrinkWrap),如下所示:
@Deployment
public static Archive<?> createDeployment() {
JavaArchive archive = ShrinkWrap.create(JavaArchive.class, "test.jar")
.addPackage(BeanClass.class.getPackage())
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml")
;
Archive[] libs = Maven.resolver()
.loadPomFromFile("pom.xml")
.resolve(
"org.mockito:mockito-all"
)
.withTransitivity()
.as(JavaArchive.class);
for (Archive lib : libs) {
archive = archive.merge(lib);
}
return archive;
}
我正在使用 Mockito 覆盖 @Alternative
。但是当我添加行 archive = archive.merge(lib)
时,我得到了异常:
Caused by: java.lang.ClassNotFoundException:
org.apache.tools.ant.Task
或者我会得到
Caused by: java.lang.ClassNotFoundException:
org.mockito.asm.signature.SignatureVisitor
有没有其他人也遇到过这种情况?
更新:
一些额外的信息,我正在尝试使用 wildfly 嵌入式容器对此进行测试:pom.xml
<dependencies>
<dependency>
<groupId>org.wildfly</groupId>
<artifactId>wildfly-arquillian-container-embedded</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.wildfly</groupId>
<artifactId>wildfly-embedded</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.extension</groupId>
<artifactId>arquillian-transaction-jta</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
您不能将 Mockito 与静态或决赛一起使用。
您将需要使用 PowerMock 来执行此操作。
我终于找到了我需要的解决方案。我通过包含 ant 依赖项找到了解决方案。当我需要使用其他测试库(如 Cucumber)时,问题就开始了。
我现在正在测试 EAR 部署,它解决了我的问题:
@Deployment
public static Archive<?> createDeployment() {
final JavaArchive ejbJar = ShrinkWrap
.create(JavaArchive.class, "ejb-jar.jar")
.addClass(NewSessionBean.class)
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
final WebArchive testWar = ShrinkWrap.create(WebArchive.class, "test.war")
.addClass(NewSessionBeanTest.class)
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml")
;
Archive[] libsArchives = Maven.resolver()
.loadPomFromFile("pom.xml")
.resolve("org.mockito:mockito-all")
.withTransitivity()
.as(JavaArchive.class);
testWar.addAsLibraries(libsArchives);
final EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class)
.setApplicationXML("META-INF/test-application.xml")
.addAsModule(ejbJar)
.addAsModule(testWar);
return ear;
}
还有我的test-application.xml
<application>
<display-name>ear</display-name>
<module>
<ejb>ejb-jar.jar</ejb>
</module>
<module>
<web>
<web-uri>test.war</web-uri>
<context-root>/test</context-root>
</web>
</module>
</application>
我正在尝试将 mockito 添加到我的 arquillian 测试中(使用 ShrinkWrap),如下所示:
@Deployment
public static Archive<?> createDeployment() {
JavaArchive archive = ShrinkWrap.create(JavaArchive.class, "test.jar")
.addPackage(BeanClass.class.getPackage())
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml")
;
Archive[] libs = Maven.resolver()
.loadPomFromFile("pom.xml")
.resolve(
"org.mockito:mockito-all"
)
.withTransitivity()
.as(JavaArchive.class);
for (Archive lib : libs) {
archive = archive.merge(lib);
}
return archive;
}
我正在使用 Mockito 覆盖 @Alternative
。但是当我添加行 archive = archive.merge(lib)
时,我得到了异常:
Caused by: java.lang.ClassNotFoundException: org.apache.tools.ant.Task
或者我会得到
Caused by: java.lang.ClassNotFoundException: org.mockito.asm.signature.SignatureVisitor
有没有其他人也遇到过这种情况?
更新: 一些额外的信息,我正在尝试使用 wildfly 嵌入式容器对此进行测试:pom.xml
<dependencies>
<dependency>
<groupId>org.wildfly</groupId>
<artifactId>wildfly-arquillian-container-embedded</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.wildfly</groupId>
<artifactId>wildfly-embedded</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.extension</groupId>
<artifactId>arquillian-transaction-jta</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
您不能将 Mockito 与静态或决赛一起使用。
您将需要使用 PowerMock 来执行此操作。
我终于找到了我需要的解决方案。我通过包含 ant 依赖项找到了解决方案。当我需要使用其他测试库(如 Cucumber)时,问题就开始了。 我现在正在测试 EAR 部署,它解决了我的问题:
@Deployment
public static Archive<?> createDeployment() {
final JavaArchive ejbJar = ShrinkWrap
.create(JavaArchive.class, "ejb-jar.jar")
.addClass(NewSessionBean.class)
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
final WebArchive testWar = ShrinkWrap.create(WebArchive.class, "test.war")
.addClass(NewSessionBeanTest.class)
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml")
;
Archive[] libsArchives = Maven.resolver()
.loadPomFromFile("pom.xml")
.resolve("org.mockito:mockito-all")
.withTransitivity()
.as(JavaArchive.class);
testWar.addAsLibraries(libsArchives);
final EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class)
.setApplicationXML("META-INF/test-application.xml")
.addAsModule(ejbJar)
.addAsModule(testWar);
return ear;
}
还有我的test-application.xml
<application>
<display-name>ear</display-name>
<module>
<ejb>ejb-jar.jar</ejb>
</module>
<module>
<web>
<web-uri>test.war</web-uri>
<context-root>/test</context-root>
</web>
</module>
</application>