Я пишу тест, который использует некоторую логику на стороне клиента и некоторую логику на стороне сервера. На стороне клиента я делаю вызов REST для некоторого веб-сервиса, который управляет данными и сохраняет их в очереди JMS. Позднее я создал JMS-вызов, чтобы узнать, что было написано в JMS-теме, и получаю неожиданные результаты.Несколько потоков в Arquillain
Вот интересная часть тестового кода, который определяет этот вопрос:
@Test
@OperateOnDeployment("my-deployable")
public void testMessageInTopic() throws Exception {
// make a rest call with the minimal request
makeRequest(getMyXmlAsString());
// compare the message with the one sent to the topic
connection = factory.createConnection();
final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
final MessageConsumer consumer = session.createConsumer(topic);
connection.start();
System.out.println("### listening for a response");
final TextMessage receivedMessage = (TextMessage) consumer.receive();
final String expectedString = "sampleFromTest"
final String receivedText = receivedMessage.getText();
System.out.println("### got this message " + receivedText);
assertEquals("the message in the received topic is the same", expectedString, receivedText);
System.out.println("#### the message was as expected");
}
Метод makeRequest (окончательные данные строк) выполняет следующие действия:
public makeRequest(final String data) {
final String url = getAppEndpoint("http://localhost:8080/doit");
final ClientRequest req= new ClientRequest(url);
req.header(HttpHeaderNames.CONTENT_TYPE, MediaType.TEXT_PLAIN);
req.body(MediaType.TEXT_PLAIN, data);
response = req.post(MyResponse.class);
}
При наблюдении бревен, здесь являются сообщениями, которые я получаю в порядке:
09:38:59,448 INFO [stdout] (pool-2-thread-1) ### got this message sampleFromTest
09:38:59,448 INFO [stdout] (pool-2-thread-1) #### the message was as expected
09:38:59,488 INFO [stdout] (pool-2-thread-2) ### listening for a response
Очевидно, что встроенные тесты и совместные тесты на стороне клиента не играют хорошо, поскольку потоки становятся проблемой. Я могу потенциально обойти эту проблему, сделав вызов остальным в моем методе @Before, или, введя веб-сервис и программно нажав на него с запросом. Однако, поскольку мой интерес заключается в тестировании полного пути интеграции, смешение запросов клиентов и серверов кажется хорошей идеей. Мой вопрос заключается в том, можно ли запустить сценарий, когда мы делаем запрос на стороне клиента и анализируем данные, полученные контейнером?