我如何单元测试我的javax.naming.Referenceable实现?

时间:2012-04-30 12:49:24

标签: java unit-testing java-ee jms jndi

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

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()实现。

结论:根据尼古拉斯的建议,我使用了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;
}

现在正在运行的测试类的完整源代码是here

1 个答案:

答案 0 :(得分:1)

您可以使用文件系统上下文提供程序。这是一个source for the jar。有一个例子here