【问题标题】:Cannot load underlying module for XCTest无法为 XCTest 加载底层模块
【发布时间】:2015-07-10 00:25:33
【问题描述】:

我在 Xcode 上快速工作,默认情况下它会创建一个引用 XCTest 的测试文件。

当我将目标成员资格设置为我的主项目时,会导致此错误

无法为 XCTest 加载底层模块

如果未设置此目标成员资格,则测试将正常运行并且一切正常。

【问题讨论】:

    标签: swift xcode xctest


    【解决方案1】:

    仔细检查有问题的文件不在主目标中,而只是在测试目标中。只有测试目标才能导入该框架。

    【讨论】:

    • 如果有帮助的话。选择您的“非测试”目标 -> 构建阶段 -> 编译源。确保您的“ClassTest.swift”不在正常的构建目标中。
    • 如果它在主包和测试包中,你如何从主包中删除它。
    • 感谢@NickN,您指出了我遇到的确切问题,现在已解决!
    • 如果它在测试目标上,那么我似乎无法访问我的主要目标中的任何主要测试方法。
    • 感谢它的魅力。只需删除测试文件即可。
    【解决方案2】:

    主项目不与 XCUnit 框架链接。您应该为您的项目创建一个单独的测试目标(如果尚不存在),并将您的测试源文件添加到该目标。

    1. 在项目导航器中选择您的项目。这将在编辑器中打开项目的设置。
    2. 单击列出目标的列底部的“+”按钮。

    1. 如果您正在处理 iOS 项目模板,请选择 iOS > Test > iOS Unit Testing Bundle

      如果您正在使用 OS X 项目模板,请选择 OS X > Test > OS X Unit Testing Bundle

    【讨论】:

    • 同时对于 iOS,它被称为 iOS UITesting Bundle(用于 UI 测试)或 iOS Unit Testing Bundle(用于单元测试...)
    【解决方案3】:

    您刚刚将测试文件/类添加到主目标中,而不是错误地添加到测试目标中。就这么简单。

    解决方案:

    1) 从主目标的“构建阶段”选项卡上的“编译源”列表中删除测试文件

    2) 将相同的文件添加到测试目标的“构建阶段”选项卡上的“编译源”中

    它必须解决问题

    【讨论】:

      【解决方案4】:

      如果我创建一个链接到XCTest.framework 的 macOS 动态框架目标,我会收到此错误(目标是框架目标,而不是测试目标!)。

      在这种情况下,通过添加解决问题

      /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks
      

      到项目的“构建设置/框架搜索路径”。

      【讨论】:

      • 更好:$(PLATFORM_DIR)/Developer/Library/Frameworks,以防您以不同的名称安装了多个版本的 Xcode(例如发布版和测试版)。
      • 感谢@robmayoff,这是正确的解决方案;-)
      • 这是构建测试支持框架时的正确答案。
      【解决方案5】:

      经过大量的故障排除并在 Stack Overflow 页面(例如这个页面)中反复查找,我设法找到了一个在其他 iOS 单元测试故障排除页面上未提及的细节。

      如果您的项目使用 CocoaPods,请确保包含嵌套在主应用程序目标中的测试目标。如果您在运行pod init之后创建了测试目标,则您的 podfile 可能不包含它。您的 podfile 应如下所示:

      target 'YourApp' do
          target 'YourAppTests' do
              inherit! :search_paths
              # Pods for testing
          end
      end
      

      记得保存你的 podfile 并在这样做之后运行pod install

      希望对你有帮助!

      【讨论】:

        【解决方案6】:

        这可能有点晚了,但你要做的是:

        单击文件 > 新建 > 目标 > iOS 单元测试包。

        然后在其中添加您的测试。这对我有用。问题是我在创建项目时没有选择创建单元测试。 希望这可以帮助某人。

        【讨论】:

          【解决方案7】:

          这个问题在你的项目中出现过两次。

          1. 当您在创建新项目时未在项目中添加 UnitTestingBundle。
          2. 当您在项目中安装 CocoaPods 时,有时并非每次都如此。

          1:答案:

          • 转到文件单击文件。

          • 然后你会看到第一个选项 New 点击它。

          • 单击它后,您会看到一些选项单击目标。

          • 然后在搜索栏搜索IOS单元测试包,添加问题就解决了。

          • 如果编译器无法授予您添加此内容的权限,请在下面给出时尝试第二种方法。

          2。回答 CocoaPod 问题:

          • 转到产品 点击产品。

          • 点击clean或按cmd+k。

          • 问题已解决。

          【讨论】:

            【解决方案8】:

            虽然接受的答案在大多数情况下都可以解决此问题,但您还可以通过另一种方式遇到此错误。

            如果您已经确保:

            正如@pwc @nick-n 和其他人指出的那样

            1. 目标成员身份的ClassTest.swift 文件,确保它附加到测试目标。
            2. ClassTest.swift 在您的主应用目标 > 构建源 > 编译源下可见

            您还可以查看以下内容:

            在您的.podspecs 文件中

            确保您的source_files 不直接或间接包含测试目录。

            例如:

            s.source_files = ["Classes/**/*.{swift}", "Classes/**/*.{xib}"]
            s.exclude_files = ["Classes/Exclude", "Classes/MyPodProjTests/"]
            

            请注意,Classes/**/*.{swift} 包含的所有内容都覆盖了必须排除目录 MyPodProjTests 的事实。

            解决方案:

            s.source_files = ["Classes/MyPodProj/**/*.{swift}", "Classes/**/*.{xib}"]
            

            注意: 这是非常极端的情况,完全是人为错误,但我认为值得指出。

            【讨论】:

            • 非常棒的评论,我已将所有内容都包含在我的s.source_files 中。谢谢!
            【解决方案9】:

            确保在选择测试框架时为所有模块选中 Target Membership。您可以通过选择 View->Utilities->Show File Inspector 来查看 Target Membership 选项

            【讨论】:

              【解决方案10】:

              就我而言,我正在为一个私有 pod 进行测试,所以在 podspec 中是这样的:

              s.test_spec 'Tests' do |test_spec|
              test_spec.source_files = 'Tests/*.swift' end
              

              但是在 Podfile 中我忘记带测试规范了,像这样:

              target 'MyApp' do
              use_frameworks!
              pod 'CoconutLib', '~> 1.0', :testspecs => ['Tests'] end
              

              【讨论】:

                【解决方案11】:

                我完成了上述所有操作,但仍然不允许我访问我想测试的方法。但是在我编写任何测试用例之前,先构建项目一次,然后可以访问这些方法进行测试。所以请尝试一下,如果它解决了任何问题,请告诉我。

                【讨论】:

                  【解决方案12】:

                  我遇到了同样的问题,我的解决方案是:

                  1. 选择我的方案
                  2. 编辑方案...
                  3. 然后,当 Scheme 配置窗口打开时,选择名为“Test”的左侧选项卡,将其重定向到此处:
                  4. 就像你可以看到我的 UITests 没有添加到这里但存在于我的项目中,所以我只需点击加号按钮并选择我的 UITests 目标,如下所示:
                  5. 然后点击“添加”按钮并关闭配置视图
                  6. 完成一个干净的项目,然后重试它应该可以工作
                  7. 别忘了验证一下:https://developer.apple.com/library/archive/qa/qa1954/_index.html

                  希望这个答案会有所帮助。

                  PS:最后一个想法是在构建设置中的测试目标中,我必须检查这些未正确配置的属性:

                  DEBUG_INFORMATION_FORMAT = dwarf; 
                  ONLY_ACTIVE_ARCH = YES;
                  VALIDATE_PRODUCT = NO;
                  

                  【讨论】:

                    【解决方案13】:

                    正如上面提到的@Alfishe:

                    您必须从Compiler Sources 中删除Build Phases 下的测试文件

                    如下图


                    【讨论】:

                    • 据我所知,如果这样做,您将无法执行测试
                    【解决方案14】:

                    检查您的测试类的目标成员资格。

                    【讨论】:

                      【解决方案15】:

                      问题是Unit Testing Bundle作为目标应该事先创建

                      [How to add it]

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 2019-06-27
                        • 2018-04-11
                        • 2015-10-18
                        • 2016-07-13
                        • 2015-12-16
                        • 1970-01-01
                        • 1970-01-01
                        • 2018-07-09
                        相关资源
                        最近更新 更多