Тестирование асинхронного кода на iOS с OCunit

Кто-нибудь знает какую-либо существующую библиотеку, которая позволяет тестировать асинхронный код с помощью OCUnit? Я думаю о чем-то вроде GHAsyncTestCase, но поставляет от SenTestCase.

Я спрашиваю, потому что, если я не найду какой-либо, я отправлю GHAsyncTestCase в OCUnit, но я не хочу дублировать работу, выполненную кем-то еще.

Ответ 1

Петр

Вам может быть интересна работа, которую я сделал с помощью Mimic, инструмента для записи в сети, написанного на Ruby, который позволяет вам заглушать запросы на высоком уровне и может использоваться из вашего Objective-C с помощью поставляемой оболочки.

Что касается асинхронного тестирования, пожалуйста, взгляните на небольшую полезность, которую я написал под названием AssertEventually.

Этот пример показывает как Mimic, так и assertEventually в действии.

Кроме того, вы можете посмотреть Kiwi - это отличная небольшая среда тестирования Objective-C, которая построена поверх OCUnit. Недавно я внес пакет для переноса моего AssertEventually поведения в Kiwi, который позволяет писать такие вещи, как:

id someObject = nil;
[do SomethingThatFetchesSomeObjectAsynchronously];
[[theObject(&someObject) shouldEventually] equal:@"some result"];

Ответ 2

AGAsyncTestHelper использует несколько иной подход, чем AssertEventually, поскольку он оценивает выражение, а не проверяет указатель на новые результаты. Одним из преимуществ использования AGAsyncTestHelper является то, что он может использоваться для блоков, делегирования-обратных вызовов и еще чего-то.

WAIT_WHILE(<expression_to_evaluate>, <max_duration>);

Отвечая на вопрос

id someObject = nil;
[self doSomethingThatFetchesSomeObjectAsynchronously];
WAIT_WHILE(self.someObject == nil, 1.0);