Обход логина / аутентификации в тестах приложения OCUnit

Я просто настраиваю тесты приложений с помощью OCUnit для своего проекта iOS и пытаюсь выяснить, что делать с аутентификацией. Мое приложение имеет экран принудительного входа в систему, где пользователь должен пройти проверку подлинности с помощью Facebook перед входом в основное приложение. Когда пользователь решает пройти аутентификацию, он помещает их в Safari, проводит их через последовательность аутентификации, управляемую Facebook, и затем возвращает их в приложение (с дальнейшими шагами регистрации, если они новый пользователь).

Я пытаюсь понять, как пройти тест приложения, чтобы пройти экран входа в систему?

Одним из вариантов, который я рассмотрел, является создание новой конфигурации сборки (например, "Test"), которая добавляет макрос препроцессора (например, "TEST = 1"), который я могу обнаружить в своем коде. Тогда, только для этой тестовой конфигурации, я мог заменить свой обычный код входа в систему на FBTestSession, который не требовал бы, чтобы приложение появлялось в Safari. Однако было бы неплохо, если бы был более чистый вариант...

Вот документация FBTestSession: https://developers.facebook.com/docs/reference/ios/3.0/class/FBTestSession/

Заранее спасибо!

1 ответ

Я могу придумать два пути, оба из которых связаны с обнаружением во время выполнения того, присутствует ли среда тестирования.

В коде входа в систему проверьте, выполняете ли вы тесты. А если нет, не продолжайте:

BOOL runningTests = NSClassFromString(@"SenTestCase") != nil;
if (runningTests)
    return;

Другой способ - использовать другой делегат приложения для тестов, который почти ничего не делает. В main.m:

@autoreleasepool {
    BOOL runningTests = NSClassFromString(@"SenTestCase") != nil;
    Class delegateClass = runningTests ? [TestingAppDelegate class] : [AppDelegate class];
    return UIApplicationMain(argc, argv, nil, NSStringFromClass(delegateClass));
}

Преимущество первого метода в том, что он быстрый и легкий. Преимущество второго метода в том, что он тщательный, что дает вам полный контроль над приложением во время тестирования.

Другие вопросы по тегам