JNDI是J2EE 的标准之一,它依赖于容器, 好比说在开发测试阶段,datasource 或者jms 的factory 是经过JNDI所寻得的话,那么要测试的话,老是要部署到应用服务器上面 好比 TOmcat,weblogic或者Jboss等,而且 这些应用服务器必须设定好对应的JNDI,好比说我要把 某个datasource 绑定到 名为 appDS的JNDI上面,而后代码部分也是经过 context.looiup的方法取寻得这个命为appDS的对象,测试起来 至关麻烦。java
在作集成测试的时候,笔者认为,这些步骤是必须的,由于集成测试的时候是要涵盖各个组件之间能很好沟通工做,那若是是单元测试的话,也是这样作的话 就有点得不偿失的了,由于单元测试部分 指向测试 lookup这个部分的代码能工做啊,或者说 我只是要经过lookup拿到一个对象而已。web
在推出 spring test 以前, 笔者曾经用过 MockEJB ,easyMock这类的 类库 来作到模拟上下文,绑定一下测试须要的JNDI等。使用起来也是颇为方便。 而Spring Test 提供的 mock jndi部分则更为轻便和容易使用啦。spring
咱们能够看到 SpringTest 中 提供的 mock jndi 只有三个类, ExpectedLookupTemplate, SimpleNamingContext,SimpleNamingContextBuilder.
服务器
SimpleNamingContext 这个类就是Spring用来Mock JNDI的类,里面用2个hashmap来存放对象的app
SimpleNamingContextBuilder 这个类呢是 SimpleNamingContext 的构建类,
单元测试
ExpectedLookupTemplate测试
使用最多的是SimpleNamingContextBuilder 这个构建类。 使用这个类 来建立 修改 JNDI Context
ui
// creates an JNDI Context and combine resources SimpleNamingContextBuilder builder = SimpleNamingContextBuilder.emptyActivatedContextBuilder(); builder.bind("appDS", db);