iPhone - получение ресурсов для логических юнит-тестов

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

Мои зависимости выглядят следующим образом: 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] также не работает.

 ma11hew2820 июл. 2011 г., 16:39
Создавая решение Гэри, я придумал следующееXcode: TEST против макросов препроцессора DEBUG.

Ответы на вопрос(3)

го пути):

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

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

Решение Вопроса

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

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

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

Для модульного теста просто убедитесь, что вы настроили «Копировать ресурсы комплекта», чтобы включить свой список в свой комплект модульного теста.

 kubi07 авг. 2009 г., 12:45
Это тоже была моя проблема. Спасибо за публикацию этого!
 Gary25 авг. 2009 г., 07:03
Нет проблем! Рад, что это помогло! знак рав
 Gary08 мар. 2010 г., 05:38
Кроме того, на случай, если кому-то интересно, я также натолкнулся на эту ссылку и в отношении managedObjectModels. Аналогичная ситуация. Spacevatican.org / 2009 / 9/10 / блок-тестирование-Core-данные-iPhone-приложения
 ma11hew2820 июл. 2011 г., 04:56
Мне нужно было настроить это так:NSURL *modelURL = [[NSBundle bundleForClass:NSClassFromString(@"NSManagedObjectModel_AdditionsTests")] URLForResource:@"Tests" withExtension:@"momd"]

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

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

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

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

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

 Gary08 июл. 2009 г., 21:08
... на самом деле под "в комплекте", я имею в виду, что я добавил его в эту папку копии в комплекте.
 Gary08 июл. 2009 г., 21:07
Хмм, иметь делегата приложения, вероятно, не нужно для того, что я делаю тогда. На данный момент я пытаюсь выполнить тестирование моей модели. До OCUnit в последнем выпуске devkit мое тестирование проводилось в производном классе в моем приложении. Я бы создал этот производный класс и проверил бы себя в отдельном потоке перед запуском и отображением представления, которое видит пользователь. Я пытаюсь учесть это в модульном тесте, где он принадлежит. Моя текущая проблема сейчас заключается в том, что у меня возникают проблемы с получением теста OCUnit для просмотра файла plist, даже если он находится в комплекте.

Ваш ответ на вопрос