在单元测试中经常会碰到被测代码里面有类似:
往往是ejb调用,或者其他资源的调用。这个时候也许你要启动application server......麻烦的单元测试-_-
其实在这样的测试中你可能已经用了个jndi.properties,里面定义了(例如在JBoss)
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
想一下,如果我们把这个factory,替换成我们自己的mock factory...
java.naming.factory.initial=MichaelNamingContextFactory
哈,这样就算被测代码里面有Context.lookup()代码也可以mock了,server也不用起了。
其实我们这样就等于实现了JNDI的一部分SPI。