运行XCTest时`[[NSBundle mainBundle] bundleIdentifier]`为nil

时间:2016-05-16 20:54:16

标签: xctest nsbundle

即使在" ...测试"目标Info.plist,标识符保持为零。我需要它为第三方lib提供有效值。

1 个答案:

答案 0 :(得分:2)

这是因为单元测试不会将您的应用程序包甚至单元测试包加载为主要包。

有关详细信息,请参阅

现在我们可以通过在单元测试项目中包含NSBundle的类别来解决这个问题。 Objective-C类别的hack也适用于swift单元测试,因为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

现在剩下的就是在单元测试中包含头文件,以便加载类别。