Я пишу тест в стиле BDD для нового требования клиента.
Просто чтобы дать представление о тестируемой системе. У нас есть служба Windows, которая прослушивает TCP-порт. Эта служба Windows отвечает за обработку сообщений, отправляемых клиентами через порт, и отвечает клиентам.
Обработка включает
1) поиск подходящего обработчика сообщений на основе запроса
2) затем форматирование запроса, которое может понять сторонняя служба
3) отправка отформатированного запроса в стороннюю веб-службу Restful
4) переформатирование ответ, полученный от веб-службы, и отправить его в клиентский сокет.
Для целей BDD мы создали самостоятельную фиктивную службу restful, которая будет отправлять ответы на основе настроенных сообщений для каждого запроса.
До сих пор все наши тесты основаны на том, что мы отправляем в порт и какой ответ мы получаем в порту. При таком подходе мы смогли охватить все функциональные возможности в тестах BDD.
Теперь новое требование заключается в том, что если клиент отправляет дополнительный элемент в теле сообщения, то сторонняя служба также должна получить этот дополнительный элемент. Если клиент не отправляет дополнительный элемент в теле сообщения, мы не должны даже отправлять этот элемент в стороннюю службу. Мы внесли это изменение (обновили класс запроса POCO с помощью метода ShouldSerialize), а также проверили результат с помощью файлов журнала.
Но мы изо всех сил пытаемся охватить это тестом BDD. Это связано с тем, что наш тест действует как клиент и отправляет сообщения на порт, поскольку мы контролируем только ответ, полученный от порта, мы подтверждаем только ответ. У нас нет контроля над вызовом сторонней службы, потому что это происходит внутри производственного кода службы Windows.
Можем ли мы каким-либо образом перехватить запрос, отправленный в веб-службу покоя из теста, чтобы утвердить запрос, чтобы проверить, отформатирован ли запрос, как ожидалось.
Примечание. Мы используем C#, specflow с Nunit.