我正在开发一个规范的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。