`[[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

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

Другие вопросы по тегам