1

我正在开发一个 JMS 提供程序来规范,它要求某些对象实现Referenceable。我已经在我的 JMS ConnectionFactory 上实现了 getReference(),并且我创建了一个对象工厂来将引用转换为对象。我正在尝试找出一种有效的单元测试方法。

Spring 的 SimpleNamingContext 不符合要求:

Context ctx = new SimpleNamingContext();
ctx.bind("testFactory", connFactory);
ConnectionFactory testConnFactory = (ConnectionFactory)ctx.lookup("testFactory");
Assert.assertEquals(connFactor, testConnFactory);

它给了我一个误报,因为 SimpleNamingContext 是一个模拟对象。对象是相同的,getReference 和我的对象工厂都没有被调用

我已经研究过可能连接一个 Jetty 服务器进行测试,但这可能比我需要的多一点。

理想情况下,我正在寻找一个简单的 Context 类,我可以像上面的示例一样直接连接到该类,它实际上将在幕后执行我的 JNDI 特定方法。除此之外,我将就如何对此进行单元测试提出其他建议。

我正在使用 Java Referenceable Objects and References教程来定义它们应该如何实现。

提前致谢。

更新:我不确定这是否相关,但这里是object factory,这是我正在尝试测试的Referenceable.getReference()实现。

结论:根据 Nicholas 在下面的建议,我使用了 RefFSContextFactory。这是我在 JUnit 测试中用来生成上下文的代码:

@Rule public TemporaryFolder folder = new TemporaryFolder();

private Context getContext() throws MalformedURLException, NamingException {
    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY, 
        "com.sun.jndi.fscontext.RefFSContextFactory");
    env.put(Context.PROVIDER_URL, folder.getRoot().toURI().toURL().toString());
    Context ctx = new InitialContext(env);
    Assert.assertNotNull(ctx);
    return ctx;
}

现在工作的测试类的完整源代码在这里

4

1 回答 1

1

您可以使用文件系统上下文提供程序。这是 jar 的一个来源这里有一个例子。

于 2012-04-30T22:02:28.757 回答