【问题标题】:`[[NSBundle mainBundle] bundleIdentifier]` is nil when running XCTest`[[NSBundle mainBundle] bundleIdentifier]` 在运行 XCTest 时为 nil
【发布时间】:2016-09-12 18:50:33
【问题描述】:

即使在“...Tests”目标 Info.plist 中定义它,标识符仍然为零。我需要它为第三方库提供有效值。

【问题讨论】:

    标签: xctest nsbundle


    【解决方案1】:

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

    有关此的更多信息,请参阅

    现在我们可以通过在您的单元测试项目中包含 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
    

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

    【讨论】:

      猜你喜欢
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-01
      相关资源
      最近更新 更多