欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 前端技术 > javascript >内容正文

javascript

使用Spring创建用于JUnit测试的JNDI资源

发布时间:2023/12/3 javascript 40 豆豆
生活随笔 收集整理的这篇文章主要介绍了 使用Spring创建用于JUnit测试的JNDI资源 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

直到最近,我还使用静态方法来设置内存数据库(HSQLDB)。 我在JUnit测试的setUp / tearDown中调用了这些方法。 当我使用Spring时,这总是让我感到不自然,并且所有内容都应在其应用程序上下文中运行。

创建一个简单的JNDI bean

在生产中使用JNDI时,我还必须为我的应用程序创建JNDI资源。 一个简单的使用Apache Commons DBCP的Spring Bean可以解决这个问题:

public class JndiBean {public JndiBean() {try {DriverAdapterCPDS cpds = new DriverAdapterCPDS();cpds.setDriver("org.hsqldb.jdbc.JDBCDriver");cpds.setUrl("jdbc:hsqldb:mem:testdb");cpds.setUser("SA");cpds.setPassword("");SharedPoolDataSource dataSource = new SharedPoolDataSource();dataSource.setConnectionPoolDataSource(cpds);dataSource.setMaxActive(10);dataSource.setMaxWait(50);SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder();builder.bind("java:comp/env/jdbc/timeandbill", dataSource);builder.activate();} catch (NamingException | ClassNotFoundException ex) {ex.printStackTrace();}} }

您不应该三思而后行地使用此基本配置,但是它对于单元测试非常有效。

首先,我创建了一个驱动程序适配器,其中包含连接数据库所需的一切。 它可以是MySQL,Postgres或您喜欢的其他任何东西。

然后,我创建一个SharedPoolDatasource。 由于测试通常按顺序运行,因此实际上不必保持大量连接。 即使不是这样,通常也将至少针对每个测试类创建Spring上下文。 您不太可能从这里获得池的好处,但是我想坚持生产服务器通常会做的事情。

SimpleNamingContextBuilder最终将先前创建的数据源绑定到JNDI上下文。 如您所见,这是一件很简单的事情:只需将其绑定,然后激活即可完成。

将JNDI bean添加到上下文

下一步是将其添加到第二个applicationContext.xml中,该文件仅由JUnit测试加载。 我位于我的单元测试文件夹中,并且包含:

<bean id="jndi" class="de.grobmeier.tab.webapp.JndiBean" lazy-init="false" />

测试中的这些注释确保我加载了所有applicationContext文件:

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={"classpath*:applicationContext.xml"}) public class TimeConverterTest {

我的生产applicationContext包含以下内容:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"><property name="jndiName" value="java:comp/env/jdbc/timeandbill"/><property name="resourceRef" value="true" /> </bean><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /> </bean>

由于没有在JUnit级别运行的Java EE服务器。 而是手动创建了JNDI连接。 在生产中,不会加载JUnits applicationContext,并且Java EE容器提供JNDI资源。

旁注:我发现Mybatis依赖于Springs自动装配“ byType”功能。

翻译自: https://www.javacodegeeks.com/2016/11/create-jndi-resources-junit-testing-using-spring.html

总结

以上是生活随笔为你收集整理的使用Spring创建用于JUnit测试的JNDI资源的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。