テストに使えるかな

InitialContextの親玉を登録するコード。この登録は1度だけ行う。(2度目以降はエラーになる。)
親玉 = ココでは SimpleContext クラス。InitialContext への bind/unbind 操作は、この SimpleContext インスタンスへ転送されてくる。

static {
    try {
        NamingManager.setInitialContextFactoryBuilder(new InitialContextFactoryBuilder() {
            private InitialContextFactory initialContextFactory_ = new InitialContextFactory() {
                private Context context = new SimpleContext();
                public Context getInitialContext(Hashtable env)
                        throws NamingException {
                    return context;
                }
            };
            public InitialContextFactory createInitialContextFactory(Hashtable env)
                    throws NamingException {
                return initialContextFactory_;
            }
        });
    } catch (NamingException e) {
        throw new RuntimeException(e);
    }
}

SimpleContext はこんな感じの簡単実装。

public class SimpleContext implements Context {
    private Hashtable env_ = new Hashtable();
    private Map values_ = new HashMap();
    public void close() throws NamingException {
        synchronized (values_) {
            values_ = new HashMap();
        }
    }
    public void unbind(String name) throws NamingException {
        synchronized (values_) {
            values_.remove(name);
        }
    }
    public Hashtable getEnvironment() throws NamingException {
        return env_;
    }
    public void unbind(Name name) throws NamingException {
        synchronized (values_) {
            values_.remove(name.toString());
        }
    }
    public Object lookup(String name) throws NamingException {
        Object o = null;
        synchronized (values_) {
            o = values_.get(name);
        }
        if (o == null) {
            throw new NamingException("[" + name + "]はバインドされていません");
        }
        return o;
    }
    public Object removeFromEnvironment(String propName) throws NamingException {
        return env_.remove(propName);
    }
    public void bind(String name, Object obj) throws NamingException {
        synchronized (values_) {
            values_.put(name, obj);
        }
    }
    public void bind(Name name, Object obj) throws NamingException {
        synchronized (values_) {
            values_.put(name.toString(), obj);
        }
    }
    public Object addToEnvironment(String propName, Object propVal) throws NamingException {
        return env_.put(propName, propVal);
    }

    // 以下略

テスト対象コードが InitialContext#lookup で取得するオブジェクトを、予めテストコードで InitilaContext#bind しておく。
# テストではモックを登録(bind)しておく。
# JNDIを使う場合のモック差し込みってこんな感じかな。