无法加载XCTest的基础模块


180

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

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

无法加载XCTest的基础模块

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

PS:我是新手,可能是一个愚蠢的问题(请启发我)


17
蚱hopper没有愚蠢的问题,只有愚蠢的提问者。;-)伟大的问题,就像每个读过这篇文章的人都会遇到同样的问题。
兰斯亲切

Answers:


167

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

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

在此处输入图片说明

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

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


3
同时,对于iOS,它称为iOS UITesting Bundle(用于UI测试)或iOS Unit Testing Bundle(用于单元测试...)
kuzdu

183

仔细检查相关文件不在主目标中,而仅在测试目标中。仅测试目标将具有要导入的框架。


16
如果有帮助。选择“非测试”目标->构建阶段->编译源。确保您的“ ClassTest.swift”不在正常的构建目标中。
尼克N

并且,如果它在主捆绑包和测试捆绑包中,则如何将其从主捆绑包中删除。
詹姆斯·罗宾逊,

1
谢谢@NickN,您指出了我遇到的确切问题,现在就解决了!
Naishta

如果它位于“测试目标”上,那么我似乎无法访问主目标中的任何主要测试方法。
UKDataGeek

谢谢,它就像一个魅力。只是删除测试文件即可。
Ccr

32

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

解:

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

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

它必须解决问题


15

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

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

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

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


完善!谢谢!
Lance Kind

9
更好:$(PLATFORM_DIR)/Developer/Library/Frameworks如果您以不同的名称安装了多个版本的Xcode(例如发行版和Beta版)。
rob mayoff

谢谢@robmayoff,这是正确的解决方案;-)
奥利弗·皮尔曼

在构建测试支持框架时,这是正确的答案。
丹尼尔·伍德

7

经过大量的故障排除并在诸如此类的Stack Overflow页面上跳来跳去,我设法找到了一个其他iOS单元测试故障排除页面中未提及的细节。

如果您的项目使用CocoaPods,请确保将嵌套在主应用程序目标中的测试目标包括在内。如果您运行创建了测试目标,则podfile可能不包含该文件pod init。您的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:答案:

  • 转到文件单击文件。

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

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

  • 然后在Searchbar中搜索IOS单元测试包和添加问题。

  • 如果编译器无法授予您添加此权限的权限,请在下面给出的情况下尝试Second Method。

2.回答CocoaPod问题:

  • 转到产品单击产品。

  • 单击清除或按cmd + k。

  • 问题解决了。


2

尽管公认的答案可以在大多数情况下解决此问题,但还有另一种方法可以解决此错误。

如果您已经确保:

正如@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。谢谢!
Mauricio Chirino

1

选择测试框架后,请确保所有模块的“目标成员身份”均已选中。您可以通过选择查看->实用程序->显示文件检查器来查看目标成员资格选项。


1

以我为例,我正在为一个私人吊舱进行测试,因此在吊舱规格中就像:

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

0

我做了以上所有操作,但是仍然不允许我访问要测试的方法。但是在我编写任何测试用例之前,先构建项目,然后可以访问这些方法进行测试。因此,请尝试一下,让我知道它是否解决了任何问题。


0

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

  1. 选择我的方案
  2. 编辑方案...
  3. 然后,在打开“方案配置”窗口时,选择名为“测试”的左侧选项卡,以在此处进行重定向: 在此处输入图片说明
  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;

0

就像上面提到的@Alfishe一样:

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

如下所示


在此处输入图片说明


1
据我所知,如果这样做,就无法执行测试
Juan Curti,


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.