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);