не могу загрузить файлы из NSBundle в модульном тесте iphone

Я использую XCode 4.

Может кто-нибудь объяснить мне, почему, когда я написал модульный тест (под тестовой целью), он не может найти мой локальный файловый ресурс? Я пытаюсь загрузить файл plist из NSBundle в модульном тесте, но он не работает в цели модульного теста. Я попытался бросить его в область «Классы» тестовой цели.

Вот мой код:

NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *finalPath = [path stringByAppendingPathComponent:@"urlMappings.plist"];
self.urlMappings  = [NSDictionary dictionaryWithContentsOfFile:finalPath];

self.urlMappings по какой-то причине пуст, хотя urlMappings.plist определенно существует в моем проекте. Вот источник urlMappings.plist, чтобы доказать, что это действительно словарь.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>%server%view.html</key>
    <string>testHtml1.html</string>
</dict>
</plist>

Любые идеи? Спасибо


person Mike S    schedule 31.03.2011    source источник
comment
Опираясь на решение Майка Симмонса, я придумал следующий Xcode: TEST vs. Макросы препроцессора DEBUG.   -  person ma11hew28    schedule 20.07.2011


Ответы (2)


В тестовой цели вы не должны использовать [NSBundle mainBundle], потому что это основной пакет, а не тестовый пакет. вы должны использовать замену [NSBundle bundleForClass:[self class]].

person jinhua liao    schedule 22.08.2013
comment
Имеет смысл. Я наградил вас решением. Спасибо! - person Mike S; 26.08.2013

Решение (которое не имеет смысла) заключается в том, что его не было в ресурсах пакета основной цели. Он должен быть в пакете ресурсов ОБЕИХ целей, хотя я использую его только в тесте.

Кто-нибудь знает, почему это так?

person Mike S    schedule 31.03.2011