栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

应用服务器外部的Junit Testing JNDI InitialContext

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

应用服务器外部的Junit Testing JNDI InitialContext

传统的做法是更改您的代码,以便将其

Context
注入(通过依赖项注入框架或手动)。然后,您只需在单元测试中传递一个模拟即可。

如果您不能执行此操作,并且您的代码必须创建

IntialContext
自身,那么您将需要设置一个伪造的JNDI实现,可以在其中植入模拟。如果您在网络上搜索内存中的JNDI实现或模拟JNDI实现,则可以找到各种选项,也可以自己编写。基本上,您将需要一个实现,
InitialContextFactory
该实现只返回一个合适的模拟,然后通过设置
java.naming.factory.initial
system属性选择该模拟。

我在编写必要的课上有裂痕。干得好:

public class MockInitialContextFactory implements InitialContextFactory {    private static final ThreadLocal<Context> currentContext = new ThreadLocal<Context>();    @Override    public Context getInitialContext(Hashtable<?, ?> environment) throws NamingException {        return currentContext.get();    }    public static void setCurrentContext(Context context) {        currentContext.set(context);    }    public static void clearCurrentContext() {        currentContext.remove();    }}public class MockInitialContextRule implements TestRule {    private final Context context;    public MockInitialContextRule(Context context) {        this.context = context;    }    @Override    public Statement apply(final Statement base, Description description) {        return new Statement() { @Override public void evaluate() throws Throwable {     System.setProperty(Context.INITIAL_CONTEXT_FACTORY, MockInitialContextFactory.class.getName());     MockInitialContextFactory.setCurrentContext(context);     try {         base.evaluate();     } finally {         System.clearProperty(Context.INITIAL_CONTEXT_FACTORY);         MockInitialContextFactory.clearCurrentContext();     } }        };    }}

用法如下:

public class FooTest {    private final Context context = mock(Context.class);    @Rule    public MockInitialContextRule mockInitialContextRule = new MockInitialContextRule(context);    @Test    public void testName() throws Exception {        // set up stubbings on the context mock        // invoke the pre under test    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/508628.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号