Подтвердить что ты не робот

IPhone - Получение ресурсов для логических модульных тестов

Я слежу за документацией Apple по написанию модульных тестов для iPhone, и из-за этого процедура не работает. Я не уверен, что понимаю, где unit test собирается получить ссылку на делегат приложения.

Мои Зависимости выглядят следующим образом: My_Program_target → UnitTesting_target → UnitTests_bundle

Ниже приведен фрагмент кода, в котором утверждение не выполняется. Я очень хорошо знаком с CPPUNIT, но мне трудно понять, как это происходит.

- (void) testAppDelegate {

    id yourApplicationDelegate = [[UIApplication sharedApplication] delegate];
    STAssertNotNil(yourApplicationDelegate, @"UIAppliation failed to find the AppDelegate");

}

Дополнительно:

Я решил в своем подходе сделать логический тест. Я пытаюсь читать в XML файле, но мне не удастся решить проблему с пакетом, который предоставит мне путь, по которому я могу получить доступ к моему файлу. Я пробовал вставлять в путь вывод allBundles, но этот путь, похоже, не работает. Ниже приводится то, что я выполняю в своем тесте (вы можете увидеть оператор отладки, который я использую для вывода путей пакетов):

NSLog(@"BundlePaths: %@", [NSBundle allBundles]);
   NSString * path = [[NSBundle bundleWithPath:@"$(TARGET_BUILD_DIR)"] pathForResource:@"SimpleTestList" ofType:@"plist"];
   STAssertNotNil(path, @"Bundle Location couldn't find the file specified");

По сути, утверждение на пути не увенчалось успехом, но я не уверен, что поставить путь или каталог для ссылки на мой пакет unitTest, который я сказал, чтобы скопировать ресурсы пакета. Вызов [NSBundle mainBundle] также не работает.

4b9b3361

Ответ 1

Хорошо, поэтому я понял это. Чтобы открыть файл в unit test, вам нужно указать файл для открытия:

NSString * filePath = [[NSBundle bundleForClass:[self class] ] pathForResource:@"SimpleTestList" ofType:@"plist"];

Если вы включите это в класс, скомпилированный как часть вашего пакета unit test, этот класс будет выглядеть внутри пакета unit test для файла SimpleTestList.plist.

Для unit test просто убедитесь, что вы настроили "Copy Bundle Resources", чтобы включить ваш plist в ваш пакет unit test.

Ответ 2

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

Главное знать, что существуют два типа модульных тестов - логические тесты, которые выполняются за пределами исполняемого файла, а затем интегрированные системные типы тестов, требующие полной рабочей среды.

Логические тесты ДОЛЖНЫ выполняться с помощью симулятора, выбранного в качестве цели, или они не будут выполняться.

Интегрированные системные тесты ДОЛЖНЫ выполняться как часть исполняемого файла, на устройстве - вы хотите, чтобы новая цель выполнила это.

Извините, что все это так сложно, этот аспект по-прежнему очень продвинут по сравнению со многими другими модулями тестирования модулей.

Ответ 3

Перевод Swary 3 Gary выше (используя URL-адрес вместо строкового пути):

let url = Bundle(for: type(of: self)).url(forResource: "SimpleTestList", withExtension: "plist")

Обратите внимание на критическую и неочевидную часть type(of: self) вместо [self class].