Тестирование асинхронного кода на iOS с помощью OCunit - PullRequest
7 голосов
/ 14 января 2011

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

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

Ответы [ 2 ]

11 голосов
/ 24 января 2011

Piotr:

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

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

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

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

id someObject = nil;
[do SomethingThatFetchesSomeObjectAsynchronously];
[[theObject(&someObject) shouldEventually] equal:@"some result"];
7 голосов
/ 26 июля 2013

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

WAIT_WHILE(<expression_to_evaluate>, <max_duration>);

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

id someObject = nil;
[self doSomethingThatFetchesSomeObjectAsynchronously];
WAIT_WHILE(self.someObject == nil, 1.0); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...