Я пишу тест стиля BDD для нового требования от клиента.Как утверждать запрос, отправленный в успокоительный веб-сервис из теста BDD (specflow with nunit)
Просто для того, чтобы дать фон в системе. У нас есть служба Windows, которая слушает TCP-порт. Эта служба Windows отвечает за обработку сообщений, отправляемых клиентами на порт, и отвечает на клиентов.
Обработка включает
1) найти правильное сообщение processer на основании запроса
2), то при форматировании запроса о том, что служба третьей стороны может понять
3) отправить форматированный запрос на третью сторону RESTful веб-сервис
4) отформатируйте ответ, полученный от веб-службы, и отправьте его в клиентский сокет.
Для целей BDD мы создали самообслуживаемую восстановительную службу, которая будет отправлять ответы на основе настроенных сообщений для каждого запроса.
До сих пор все наши тесты основаны на том, что мы отправляем в порт, и какой ответ мы получили в порту. При таком подходе мы смогли охватить все функциональные возможности тестов BDD.
Теперь новое требование заключается в том, что клиент отправляет дополнительный элемент в тело сообщения, а сторонняя служба также должна получить дополнительный элемент. Если клиент не отправляет дополнительный элемент в тело сообщения, мы не должны даже отправлять этот элемент в стороннюю службу. Мы сделали это изменение (обновили класс запроса POCO с помощью метода ShouldSerialize), а также проверили результат с использованием файлов журнала.
Но мы изо всех сил стараемся покрыть это из теста BDD. Это связано с тем, что наш тест работает как клиент и отправляет сообщения на порт, поскольку мы контролируем только ответ, полученный от порта, который мы утверждаем только в ответ. У нас нет контроля над вызовом сторонней службы, потому что это происходит внутри кода производственной программы Windows.
Можно ли каким-либо образом перехватить запрос, отправляемый в тестовую службу, чтобы подтвердить запрос, чтобы проверить, отформатирован ли запрос, как ожидалось.
Примечание: Мы используем C#, specflow с Nunit.
Эта проблема решена теперь, добавив некоторые методы testhelper в фиктивную службу restfull. И добавление сервиса ServiceMehavior InstanceContextMode для манекена restfull службы в InstanceContextMode.Single. Всякий раз, когда фиктивная служба получает запрос, она сохраняет запрос в частной переменной и в одном из методов testhelper мы возвращаем запрос. Из теста после отправки байтов в TCP мы подключаемся к службе с помощью RestClient, а затем вызываем вспомогательный метод для проверки того, что является запросом, полученным службой, и утвердил его на основе наших ожиданий. – VinothNair