`[[NSBundle mainBundle] bundleIdentifier]` равен нулю при запуске XCTest
Даже если он определен в целевом Info.plist "... Tests", идентификатор остается нулевым. Мне нужно, чтобы оно имело действительное значение для сторонней библиотеки.
1 ответ
Это связано с тем, что модульные тесты не загружают ваш пакет приложений или даже пакет модульных тестов в качестве основного пакета.
Для получения дополнительной информации об этом см.
Теперь мы можем обойти это, включив категорию в NSBundle в ваш проект модульного тестирования. Взлом категории Objective-C также работает для быстрых модульных тестов, потому что Bundle соединен с NSBundle, просто убедитесь, что у вас есть мостовой заголовок для вашего проекта модульного тестирования.
После этого вы можете выполнить поиск правильного основного пакета, но если вы просто хотите быстро и грязно получить действительный идентификатор пакета, используйте следующее
@interface NSBundle (BundleIdentifier)
-(NSString *)bundleIdentifier;
@end
@implementation NSBundle (BundleIdentifier)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
-(NSString *)bundleIdentifier
{
return @"com.yourcompany.yourapp.unitTests";
}
#pragma clang diagnostic pop
@end
Теперь осталось только включить файл заголовка в свой модульный тест, чтобы категория загрузилась.