2012-04-30 7 views
1

Я разрабатываю 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.

+1

Вы тестируете, работает ли SimpleNamingContext() или это часть вашего модульного теста? – eabraham

+0

Я тестирую getReference() и мою реализацию фабрики объектов JNDI. Я пробовал использовать SimpleNamingContext(), но поскольку это макет, он фактически не попадает в реальные JNDI-перехватчики. –

+0

Убедитесь, что вы включили потоковые загрузчики классов потоков в свой тестовый набор. В последний раз, когда я работал над JIDI SPI, загрузчики контекстных классов включали большую часть сложности. –

ответ

1

Вы можете использовать Контекстный провайдер файловой системы. Вот один source for the jar. Вот пример here.

+1

Победитель, победитель курица! Благодаря! –

Смежные вопросы