Java coding tips - Minimum JNDI mock for unit tests
Minimum JNDI mock for unit tests:
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.naming.spi.InitialContextFactory;
public class InitialContextFactoryForTest
implements InitialContextFactory {
private static Context context;
static {
try {
context = new InitialContext(true) {
Map<String, Object> bindings = new HashMap<String, Object>();
@Override
public void bind(String
name, Object obj)
throws NamingException {
bindings.put(name, obj);
}
@Override
public Object lookup(String name)
throws NamingException {
return bindings.get(name);
}
};
} catch (NamingException e) { // can't happen.
throw new RuntimeException(e);
}
}
public Context getInitialContext(Hashtable<?, ?>
environment)
throws NamingException {
return context;
}
public static void
bind(String name, Object obj) {
try {
context.bind(name, obj);
} catch (NamingException e) { // can't happen.
throw new RuntimeException(e);
}
}
}
Using in test:
@Override
protected void setUp() throws Exception {
// sets up the InitialContextFactoryForTest as default factory.
System.setProperty(Context.INITIAL_CONTEXT_FACTORY,
InitialContextFactoryForTest.class.getName());
// binds the object
dataSource = getDataSource();
InitialContextFactoryForTest.bind("jdbc/mysql",
dataSource);
}
öüó
Mar 18, 2012
comments powered by Disqus