无法为XCTest加载基础模块

问题描述 投票:159回答:12

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

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

无法为XCTest加载基础模块

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

PS:我是swift的新手,这可能是一个愚蠢的问题(请赐教)

swift xcode xctest
12个回答
146
投票

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

  1. 在Project Navigator中选择您的项目。这将在编辑器中打开项目的设置。
  2. 点击列出目标的列底部的“+”按钮。
  3. 如果您正在处理iOS项目模板,请选择iOS > Test > iOS Unit Testing Bundle。 如果您正在使用OS X项目模板,请选择OS X > Test > OS X Unit Testing Bundle

0
投票

我做了以上所有,但仍然不允许我访问我想测试的方法。但在我编写任何测试用例之前,只需构建一次该项目,然后就可以测试这些方法了。所以请尝试一下,让我知道它是否解决了任何问题。


0
投票

我有同样的问题,我的解决方案是:

  1. 选择我的计划
  2. 编辑方案......
  3. 然后在打开Scheme配置窗口时,选择名为“Test”的左侧选项卡,在此处重定向:enter image description here
  4. 就像你可以看到我的UITests没有添加到这里但存在于我的项目中所以我只需点击加号按钮并选择我的UITests目标如下:enter image description here
  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;

0
投票

正如@Alfishe上面提到的那样:

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

如下所示


enter image description here


170
投票

仔细检查相关文件是否不在主目标中,而是仅测试目标。只有测试目标才能导入该框架。


29
投票

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

解:

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

2)在测试目标的“Build Phases”选项卡上的“Compile Sources”中添加相同的文件

它必须解决这个问题


9
投票

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

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

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

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


6
投票

经过大量的故障排除和围绕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

希望能帮助到你!


5
投票

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

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

然后在那里添加测试。这对我有用。问题是我在创建项目时没有选择创建单元测试。希望这有助于某人。


2
投票

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

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

1:答案:

  • 转到文件单击文件。
  • 然后你看第一个选项New点击它。
  • 单击它后,您会看到一些选项单击目标。
  • 然后在搜索栏搜索IOS单元测试捆绑和添加问题解决。
  • 如果编译器无法授予您添加权限,请在下面给出第二种方法。

2.回答CocoaPod问题:

  • 转到产品单击产品。
  • 单击清洁或按cmd + k。
  • 问题解决了。

1
投票

选择测试框架时,请确保已选中所有模块的目标成员资格。您可以通过选择View-> Utilities-> Show File Inspector来查看Target Membership选项


1
投票

虽然接受的答案大多数时间都能解决这个问题,但还有一种方法可以解决这个问题。

如果您已经确保:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.