Я разрабатываю JMS-провайдера для спецификации, и для этого требуется, чтобы определенные объекты реализовали Referenceable. Я реализовал getReference() в моем JMS ConnectionFactory, и я создал object factory для преобразования ссылок на объекты. Я пытаюсь найти эффективный способ модульного теста.Как я могу выполнить тестирование моей реализации javax.naming.Referenceable?
в Spring SimpleNamingContext не соответствует законопроекту:
Context ctx = new SimpleNamingContext();
ctx.bind("testFactory", connFactory);
ConnectionFactory testConnFactory = (ConnectionFactory)ctx.lookup("testFactory");
Assert.assertEquals(connFactor, testConnFactory);
Это дает мне ложное положительный результат, потому что SimpleNamingContext является фиктивным объектом. Объекты идентичны и ни getReference, ни моя фабрика объектов не вызваны.
Я изучил возможность подключения сервера Jetty для тестирования, но это может быть чуть больше, чем мне нужно.
В идеале, я ищу простой класс Контекста, с которым я могу подключиться прямо, как пример выше, который фактически выполнит мои JNDI-специфические методы за кулисами. Короче, я возьму другие рекомендации о том, как это сделать.
Я использую учебники Java Referenceable Objects and References для определения того, как они должны быть реализованы.
Заранее спасибо.
UPDATE: Я не уверен, что это актуально, но вот 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.
Вы тестируете, работает ли SimpleNamingContext() или это часть вашего модульного теста? – eabraham
Я тестирую getReference() и мою реализацию фабрики объектов JNDI. Я пробовал использовать SimpleNamingContext(), но поскольку это макет, он фактически не попадает в реальные JNDI-перехватчики. –
Убедитесь, что вы включили потоковые загрузчики классов потоков в свой тестовый набор. В последний раз, когда я работал над JIDI SPI, загрузчики контекстных классов включали большую часть сложности. –