Тестирование асинхронных ответов в инфраструктуре Sen - PullRequest
1 голос
/ 02 ноября 2010

Я использую тестовую среду iPhone Sen для тестирования.Мне нужно проверить асинхронные ответы, поступающие с сервера.Может кто-нибудь помочь мне узнать способ проверить это.

Спасибо

Ответы [ 3 ]

3 голосов
/ 15 ноября 2010

Возможно, это был дублирующий вопрос, но я не согласен с ответом на первоначальный. Я подробно описал этот вопрос.

Таким образом, создание пользовательского цикла выполнения для ваших тестов является сложным и хрупким. Ваши тесты будут выполняться более согласованно и быстрее, если вы удалите зависимость от внешней службы, которая возвращает асинхронные ответы, и имитируют ответы в ваших тестах. Таким образом, ваши тесты не будут провалены, если внешний сервис выйдет из строя, и ваши тесты будут выполняться намного быстрее.

Доступны библиотеки, которые открывают такие классы, как NSURLConnection, и делают это легко. Это также относительно просто сделать для одного класса (например, NSURLConnection), благодаря динамическим свойствам Objective C. Вот пример .

1 голос
/ 15 ноября 2010

Я не использую тест Sen, потому что он не запускается в симуляторе или устройстве (или, по крайней мере, не работал, когда я впервые начал выполнять Objective C в прошлом году), вместо этого я использую GHUnit фреймворк для тестирования и OCMock в качестве фреймворка GHUnit будет запускать тесты на устройстве, которое гарантирует, что код правильный для него. OCMock допускает полную насмешку, частичную насмешку и извращение методов, которые являются мощными инструментами для юнит-теста.

Я думаю, что есть две части для тестирования в этой ситуации.

  1. Модульное тестирование отдельных компонентов (GHUnit и OCMock). Здесь вы можете вызывать методы напрямую и моделировать среду, в которой будет работать ваш класс. Поэтому вам не нужна настройка сервера для тестирования асинхронных вызовов. Просто создайте экземпляр класса в модульном тесте и вызовите его методы.

  2. Интеграционное тестирование. (Только GHUnit) Здесь вы хотите выполнить базовый тест, чтобы убедиться в правильности вашего понимания связи между вашим кодом и сервером. Так что это где вам нужен сервер. В зависимости от ваших потребностей, это может быть много или мало работы. Например, когда я сделал это, я просто настроил сервер Glassfish с EJB3-бином, чтобы имитировать сервер, к которому я собираюсь подключиться. Важно то, что настроенный вами сервер должен вести себя точно так же, как и конечный производственный сервер.

Так что в основном это двусторонний подход. Модульное тестирование, чтобы проверить каждый уголок вашего кода. Интеграционное тестирование для проверки правильности общего взаимодействия с сервером.

Важно использовать оба, потому что, хотя модульное тестирование может проверять функциональность, которую сложно проверить с помощью интеграционного теста, оно является настолько же точным, как и ваше понимание взаимодействия между классом и сервером. Таким образом, вам нужен хотя бы базовый интеграционный тест, чтобы подтвердить правильность вашего понимания. Но не тратьте время на написание множества интеграционных тестов, чтобы проверить каждый закоулок класса. Это всегда намного сложнее, чем юнит-тест.

0 голосов
/ 19 марта 2013

Я использую это для тестирования асинхронных операций.

https://github.com/hfossli/AGWaitForAsyncTestHelper

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...