【问题标题】:iOS Unit Testing: Class is implemented in bothiOS 单元测试:类在两者中都实现
【发布时间】:2016-01-12 16:37:57
【问题描述】:

我正在使用 Swift 2 和 Xcode 7 构建一个 iOS 9 应用程序。

我的应用在将其部署到手机时运行良好,但是当我运行任何单元测试时,我收到很多类的以下错误消息:

Class _TtC5<AppName>19<ClassName> is implemented in both /Users/<Username>/Library/Developer/CoreSimulator/Devices/<UUID>/data/Containers/Bundle/Application/<UUID</<AppName>.app/<AppName> and /Users/<Username>/<Path/To/Workspace>/DerivedData/<AppName>/Build/Products/Debug-iphonesimulator/<AppName>.xctest/<AppName>. One of the two will be used. Which one is undefined.

有什么想法吗?

【问题讨论】:

    标签: ios swift xcode xcode7 xctest


    【解决方案1】:

    只将测试类添加到您的测试目标,而不是任何 iPhone 应用程序类。然后只需将您的应用名称作为模块导入您的测试类,即可访问所有应用类。

    import MyAppName
    

    【讨论】:

    • 这对我不起作用 - 我使用了“@import AppName;” - 语法与此不同吗?
    【解决方案2】:

    @Mundi 的回答在某些情况下是正确的。

    但是,我遇到了同样的错误,导致它的原因是 Cocoa Pods 的 libPods.a 文件被链接到应用程序目标和测试目标中。

    【讨论】:

      【解决方案3】:

      运行测试套件时重复的类实现:在我的例子中,由于测试目标有一个宿主应用程序,你不需要链接第三方框架。我必须从 Build Settings 中清除“Other Linker Flags”(OTHER_LDFLAGS),因为它链接到工作区的所有 CocoaPods。

      【讨论】:

        【解决方案4】:

        我在使用 XCTest 时遇到了同样的错误。记得选择Allow testing Host Application APIs

        然后在Build Phases 中为您的XCTest Target - 就像其他人所说的那样 - 确保在Compile Sources 中有零个文件已经在Host Application 中编译。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-10-20
          • 2021-03-13
          • 2015-08-15
          • 2018-12-09
          • 2014-06-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多