Unit testing 如何使用Junit测试返回MongoClient的单例EJB?
我必须使用JUnit测试一个返回MongoClient的简单单例EJB。 我想我可以试试阿奎利安 通过这段代码,我获得了一个Java.lang.AssertionError,因为EJB不是由容器注入的。我错在哪里Unit testing 如何使用Junit测试返回MongoClient的单例EJB?,unit-testing,jakarta-ee,junit,ejb,jboss-arquillian,Unit Testing,Jakarta Ee,Junit,Ejb,Jboss Arquillian,我必须使用JUnit测试一个返回MongoClient的简单单例EJB。 我想我可以试试阿奎利安 通过这段代码,我获得了一个Java.lang.AssertionError,因为EJB不是由容器注入的。我错在哪里 EJB类: @Stateless @Singleton @ConcurrencyManagement(ConcurrencyManagementType.CONTAINER) public class MongoClientProviderBean { private Lo
- EJB类:
@Stateless @Singleton @ConcurrencyManagement(ConcurrencyManagementType.CONTAINER) public class MongoClientProviderBean { private Logger logger = Logger.getLogger(MongoClientProviderBean.class); private MongoClient mongoClient = null; @Lock(LockType.READ) public MongoClient getMongoClient() { return mongoClient; } @PostConstruct public void init() { try { String address = "mongo-host"; int port = 27017; //TODO: inject del indirizzo e porta mongoClient = new MongoClient(address, port); logger.info("Inizializzato mongoclient ("+address+", "+port+")"); } catch (UnknownHostException e) { e.printStackTrace(); } } @PreDestroy public void tearDown() { mongoClient.close(); logger.info("Mongoclient chiuso"); } }
- 测试等级:
@RunWith(Arquillian.class) public class MongoClientProviderBeanTest { private static final Logger logger = Logger.getLogger(MongoClientProviderBean.class); @EJB MongoClientProviderBean mongoClientProviderBean; @Deployment public static JavaArchive createDeployment() { return ShrinkWrap.create(JavaArchive.class, "test.jar") .addClasses(MongoClientProviderBean.class, MongoClient.class) .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); } @Test public void getMongoClient() throws Exception { assertNotNull(mongoClientProviderBean); /* dummy test */ mongoClientProviderBean.getMongoClient(); } }
- POM的一部分:
[...] <dependencyManagement> <dependencies> <dependency> <groupId>org.jboss.arquillian</groupId> <artifactId>arquillian-bom</artifactId> <version>1.1.13.Final</version> <scope>import</scope> <type>pom</type> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.jboss.arquillian.container</groupId> <artifactId>arquillian-weld-ee-embedded-1.1</artifactId> <version>1.0.0.CR9</version> <scope>test</scope> </dependency> <dependency> <groupId>org.jboss.weld</groupId> <artifactId>weld-core</artifactId> <version>2.3.5.Final</version> <scope>test</scope> </dependency> <dependency> <groupId>org.jboss.arquillian.junit</groupId> <artifactId>arquillian-junit-container</artifactId> <scope>test</scope> </dependency> [...] </dependencies> [...]
JUnit无法启动容器。仅焊接无法注入EJB。也许您可以尝试使用扩展焊接,以便像普通bean一样注入EJB。焊接本身不会注入EJB。也许您可以尝试使用extends weld,以便像普通bean一样注入EJB。谢谢您的回复;)。也许我不明白这个库是如何工作的,但在这个例子中()EJB是用Weld注入的。这是怎么可能的?构建在Weld之上的EJB服务器通过注入特殊的扩展来扩展它。这些扩展允许it更改行为,以便使用TransactionManager,注入EJB。。。这就是焊接se不够的原因。遗憾的是,唯一的可嵌入EJB容器是TOME,它不是基于Weld的。我的目标是,提供一些功能测试,而不必启动ejb服务器,使用其复杂的配置、数百个线程、复杂的数据源和jms定义。所示项目中还有一个示例:。但是网上还有很多其他的例子,如何在arquillian内部启动wildfly。这是不正确的。Weld ee embedded是一个支持EJB注入的容器。然而,我会选择Wildfly进行测试。@bartosz.majsak有趣的是,我确信,weld se本身并不支持它。我该如何激活它,因为我使用自己的扩展使它工作。通常情况下,带有EJB注释的字段保持为空。啊哈,我必须研究一下这个,焊接se和焊接…嵌入在这里是不同的,我认为不是这样。谢谢你的回复;)。也许我不明白这个库是如何工作的,但在这个例子中()EJB是用Weld注入的。这是怎么可能的?构建在Weld之上的EJB服务器通过注入特殊的扩展来扩展它。这些扩展允许it更改行为,以便使用TransactionManager,注入EJB。。。这就是焊接se不够的原因。遗憾的是,唯一的可嵌入EJB容器是TOME,它不是基于Weld的。我的目标是,提供一些功能测试,而不必启动ejb服务器,使用其复杂的配置、数百个线程、复杂的数据源和jms定义。所示项目中还有一个示例:。但是网上还有很多其他的例子,如何在arquillian内部启动wildfly。这是不正确的。Weld ee embedded是一个支持EJB注入的容器。然而,我会选择Wildfly进行测试。@bartosz.majsak有趣的是,我确信,weld se本身并不支持它。我该如何激活它,因为我使用自己的扩展使它工作。通常情况下,带有EJB注释的字段保持为空。啊哈,我必须研究一下这个,焊接se和焊接…嵌入在这里是不同的,我认为不是这样。感谢您对WildFly的stacktrace,它清楚地表明您的适配器配置错误-validateWildFlyDir失败,路径为
path。在您对WildFly的stacktrace中,它清楚地表明您对适配器配置错误-validateWildFlyDir失败,路径为null
path。null
org.jboss.arquillian.container.spi.client.container.LifecycleException: Could not start container at org.jboss.as.arquillian.container.managed.ManagedDeployableContainer.startInternal(ManagedDeployableContainer.java:168) at org.jboss.as.arquillian.container.CommonDeployableContainer.start(CommonDeployableContainer.java:123) at org.jboss.arquillian.container.impl.ContainerImpl.start(ContainerImpl.java:199) [...]Caused by: java.lang.IllegalArgumentException: WFLYLNCHR0001: The path 'null' does not exist at org.wildfly.core.launcher.Environment.validateWildFlyDir(Environment.java:313) at org.wildfly.core.launcher.AbstractCommandBuilder.validateWildFlyDir(AbstractCommandBuilder.java:652)