Модульное тестирование XCode - доступ к ресурсам из пакета приложения? - PullRequest
15 голосов
/ 05 мая 2010

У меня возникла проблема, и я хотел подтвердить, что все делаю правильно.

Я могу тестировать простые вещи с помощью моих тестов SenTestingKit, и это работает нормально. Я установил пакет модульных тестов и установил его как зависимость от основной цели приложения. Он успешно запускает все тесты всякий раз, когда я нажимаю cmd + B.

Здесь я сталкиваюсь с проблемами. У меня есть несколько XML-файлов, которые мне нужно загрузить из папки ресурсов как часть приложения. Будучи хорошим модульным тестером, я хочу написать модульные тесты, чтобы убедиться, что они загружаются правильно.

Итак, у меня есть код, который выглядит следующим образом:

NSString *filePath = [[NSBundle mainBundle] 
    pathForResource:@"foo" ofType:@"xml"];

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

Так что я изменил его, чтобы использовать известный класс, подобный этому:

NSString *filePath = [[NSBundle bundleForClass:[Config class]] 
    pathForResource:@"foo" ofType:@"xml"];

Это тоже не работает, потому что для того, чтобы тест даже компилировал код, подобный этому, Config должен быть частью Цели модульного теста. Если я добавлю это, то пакет для этого класса станет пакетом Unit Test. (Тьфу!)

Я неправильно подхожу к этому?

Ответы [ 2 ]

20 голосов
/ 05 мая 2010

При попытке воспроизвести вашу проблему меня поразило: вы пытались просто добавить свои ресурсы в свой тестовый пакет? Не вызовет ли это проблем? Я сделал именно это, и это отлично сработало для меня. Например:

Код:

- (void)testBundleLoading {
  NSLog(@"Main Bundle Path: %@", [[NSBundle mainBundle] bundlePath]);

  for (NSBundle *bundle in [NSBundle allBundles]) {
    NSLog(@"%@: %@", [bundle bundleIdentifier], 
                     [bundle pathForResource:@"fire" ofType:@"png"]);
  }
}

Выход:

2010-05-05 14:31:05.961 otest[16970:903] Main Bundle Path: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.3.sdk/Developer/usr/bin
2010-05-05 14:31:05.962 otest[16970:903] (null): (null)
2010-05-05 14:31:05.963 otest[16970:903] com.freetimestudios.KayakKingTests: /Volumes/FreeTime/KayakKing/build/Debug-iphonesimulator/KayakKingTests.octest/fire.png

Надеюсь, это поможет.

0 голосов
/ 17 июля 2011

Я столкнулся с этой проблемой с Xcode 4, и моя проблема заключалась в том, что у меня был старый проект Xcode 3 и каким-то образом пропал информационный лист для цели теста. Я добавил новый проект UnitTests-Info.plist и неожиданно смог снова получить ресурсы.

...