2011-02-04 4 views
2

У меня есть заданный тест, который я хочу запустить в JUnit. Он имеет зависимость от сложной службы, которую вызывает код с помощью JMS, поэтому при запуске теста JUnit у него не будет доступа к этому. Итак, учитывая тот факт, что мне нужно вызвать эту услугу, каков наилучший способ отключить эту службу, чтобы она просто возвращала жестко кодированный ответ при вызове во время запуска теста JUnit?Зависимости JMS в модульных тестах

Прямо сейчас он использует JNDI для поиска очереди, и это отлично работает теперь, используя easymock, так что весна инициализируется без проблем. Но он также должен получить ответ на свою очередь ответа от службы-заглушки (очень важно).

+0

Это синхронный или асинхронный вызов? –

+0

Стоит ли пытаться изолировать тестируемый код от службы? –

+0

@Romain Hppeau: Синхронно. Хотя беспокойство является универсальным, поэтому я бы сказал, что это не имеет значения. – Zombies

ответ

1

Рассматривали ли вы использование встроенного ActiveMQ в своих модульных тестах?

http://activemq.apache.org/how-to-unit-test-jms-code.html

+0

Это не значит, что нужно вводить собственное сервис-заглушку. Мой модульный тест не будет работать так, как я хочу, если я не получу действительный ответ. Допустимый ответ может быть просто стробированной XML-строкой. – Zombies

1

Как ответ должен быть передан на очереди ответа? Я предполагаю, что это происходит путем вызова определенного метода обратного вызова где-то. У кого есть доступ к этому методу?

Если очередь ответа передана в службу-заглушку, вы можете записать ее через EasyMock, а затем напрямую вызвать методы на ней. Способ сделать это очень кратко обсуждается в the EasyMock documentation (поиск «захвата»). Простой пример:

Capture<Queue> replyQueueCapture = new Capture<Queue>(); 
... 
MessageService stubService = createMock(MessageService.class); 
stubService.sendMessage(capture(replyQueueCapture)); 
... 
// run the test which indirectly invokes the stub service 
... 
Queue replyQueue = replyQueueCapture.getValue(); 
replyQueue.offer(replyMessage); 
Смежные вопросы