无法加载 XCTest 的基础模块

我正在使用 Swift 开发 Xcode,默认情况下它会创建一个引用 XCTest 的测试文件。

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

无法加载 XCTest 的基础模块

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

79289 次浏览

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

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

enter image description here

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

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

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

确保在选择测试框架时为所有模块选中了 Target Membership。您可以通过选择 View-> Utitility-> Show File spector 来查看目标成员选项

您只是将您的测试文件/类添加到主目标中,而不是错误地添加到测试目标中。

解决方案:

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

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

它必须解决这个问题

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

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

然后把你的测试加进去。这招对我很管用。问题在于我在创建项目时没有选择创建单元测试。 希望这对谁有帮助。

此问题在项目中出现两次。

  1. 创建新项目时不在项目中添加 UnitTestingBundle。
  2. 当您在项目中安装 CocoaPods 时,并不是每次都这样。

答案:

  • 转到文件点击文件。

  • 然后您会看到第一个选项新建点击它。

  • 点击它之后,你会看到一些选项点击目标。

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

  • 如果编译器不能给你权限添加这个,然后尝试第二个方法时,下面给出。

2. 回答 CocoaPod 问题:

  • 转到产品点击产品。

  • 单击 clean 或按 cmd + k。

  • 问题解决了。

我做了以上所有的事情,但是仍然不允许我访问我想要测试的方法。但是在我编写任何测试用例之前,曾经构建过一次项目,然后这些方法就可以进行测试了。所以一定要试试,如果它解决了任何一个问题,请告诉我。

如果创建一个链接到 XCTest.framework的 macOS 动态框架目标(该目标是一个框架目标,而不是测试目标!) ,就会出现这个错误.

在这种情况下,这个问题可以通过添加

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

项目的「建置设定/架构搜寻路径」。

我也有同样的问题,解决办法就是:

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

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

PS: 在构建设置的 Test 目标中,我必须检查这些配置不正确的属性:

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

虽然接受的答案在大多数情况下解决了这个问题,但是还有一种方法可以解决这个错误。

如果您已经确保:

正如@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}"]

注: 这是非常边缘的情况,完全是人为的错误,但我认为这是值得指出的

正如@Alfishe 上面提到的:

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

如下所示


enter image description here

在进行了大量的故障排除并在 Stack Overflow 页面(比如本文)周围跳转之后,我设法找到了其他 iOS Unit Test 故障排除页面中没有提到的一个细节。

如果您的项目使用 CocoaPods,请确保将测试目标嵌套在主应用程序的目标中。如果您创建了运行 pod init的测试目标 之后,您的 podfile 可能不会包含它。你的 podfile 应该是这样的:

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

请记住保存您的 podfile 并在这样做之后运行 pod install

希望能有帮助!

检查测试类的目标成员。

对我来说,我是在测试一个私人的豆荚,所以在豆荚规格是这样的:

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

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

[ How to add it ]