@生成EntityManager
的一个类时,它会按预期工作。@alternative
时,它使用另一个,而不管beans.xml
怎么说。@alternative
注释时,deploymentException:WELD-001408类型[EntityManager]在注入点带有限定符[@Default]的不满足依赖项[[field]@Inject private Arquillian.ArquillianTestAbstract.em]
我希望beans.xml
出现在错误的位置或其他地方,但我搜索了很多地方(包括SO上的这个相关问题),但我找不到我的错误。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.mystuff</groupId>
<artifactId>myparent</artifactId>
<version>${project-version}</version>
</parent>
<artifactId>myproject</artifactId>
<packaging>ejb</packaging>
(snip - various dependencies)
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ejb-plugin</artifactId>
<version>${ejb-plugin-version}</version>
<configuration>
<ejbVersion>${ejb-version}</ejbVersion>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${surefire-plugin-version}</version>
<configuration>
<argLine>-Dfile.encoding=UTF-8</argLine>
<forkCount>1C</forkCount>
<redirectTestOutputToFile>false</redirectTestOutputToFile>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
bean-discovery-mode="all" version="1.1"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd">
<alternatives>
<class>persistence.TestDatabaseProducer</class>
</alternatives>
</beans>
src/main/java/persistence/databaseProducerImpl.j
@Singleton
@Alternative
public class DatabaseProducerImpl implements DatabaseProducer {
@Produces
@MyDatabase
@Override
public EntityManager createEntityManager() {
return Persistence.createEntityManagerFactory("primary").createEntityManager();
}
}
src/main/java/persistence/TestDatabaseProducer.java:
@Singleton
@Alternative
public class TestDatabaseProducer implements DatabaseProducer {
@Produces
@InternalDatabase
@Override
public EntityManager createEntityManager() {
return Persistence.createEntityManagerFactory("internal").createEntityManager();
}
}
最后,我找错了方向。beans.xml
文件没有任何问题,只是在测试过程中没有考虑到它。
这是通过Arquillian对Weld的测试所特有的,也是由于资产打包和发送到嵌入式容器的方式所致。
Arquillian测试的标准实践鼓励使用ShrinkWrap创建部署在Weld上的JavaArchive
,如果您不要求,ShrinkWrap不会使用beans.xml
。
@Deployment
public static JavaArchive createDeployment() {
final BeansDescriptor beansXml = Descriptors.create(BeansDescriptor.class);
return ShrinkWrap.create(JavaArchive.class)
.addPackages(true, "persistence")
.addAsManifestResource(new StringAsset(beansXml.alternativeClass(TestDatabaseProducer.class).exportAsString()), beansXml.getDescriptorName());
}
我经常使用依赖于几个(比如5-10个)其他EJB/CDI bean的EJB,并且许多方法只使用它们的一个子集。集成测试(我们将Arquillian与嵌入式GlassFish4.0容器一起使用)它们是痛苦的,因为我仍然必须为整个类图提供依赖关系。我一个接一个地将类添加到ShrinkWrap归档中,因为添加整个包会创建更多的依赖关系,我不想添加所有类,因为这会显著增加完成一个测试所需的时间。我也不希望
我试图让测试(junit和robolectric)在Android项目中工作,但完全卡住了。我的主要问题是,我用gradle发现的所有测试都以某种方式拉入了java插件,然后我得到了这个错误: 我目前看到的唯一出路是分裂成测试和应用程序项目--但我想避免这种情况。任何例子/提示将非常感谢! 在官方文档中没有提到单元测试--只提到仪器测试--但我希望单元测试能快速得到结果。
我正在尝试将Spring Boot应用程序的一些集成测试从迁移到。目前,测试使用的是 当测试运行时,被配置为使用与服务器运行时相同的基本URL和(随机选择的)端口。 在我的一个测试中,我登录并保存authorization-response头值,以便在后续的API调用中使用。我试着将它迁移到,就像这样 但是当我像这样创建实例时,它没有配置为使用与应用程序相同的端口。 我尝试使用的依赖注入实例 这确
Gradle4.6增加了对JUnit5的支持。 只要我没有用于例如集成测试的另一个sourceset,这对我是有效的:我不知道如何在我的集成测试中启用。 我所能做的是让任务与新的JUnit5支持一起工作,但我的任务使用JUnit5控制台并从命令行运行测试。最后,我在gradle中放弃对JUnit5的支持,并回滚到使用JUnit5控制台进行两个测试。 除了之外,如何在其他任务上启用Gradle4.6
我创建了一个NetBeans企业应用程序,它由包装ejb(jar)项目和web(war)项目的ear组成。 我的web项目中有一个servlet,我想在其中使用ejb项目中的一个ejb。
第一:是的,我读到了https://dropwizard.github.io/dropwizard/manual/testing.html 我想做一些集成测试,以及为什么我必须启动整个应用程序。现在的问题是,我有一些与“外部世界”的接口,如DB或一个内部的Rest-Client,它与一个远程应用程序交谈。我想用嘲弄来嘲笑他们。通常这没问题。 现在我的问题是:如何使用模拟数据库和模拟客户端启动整个应