无法为XCTest

时间:2015-04-30 10:32:47

标签: swift xcode xctest

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

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

  

无法为XCTest加载基础模块

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

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

13 个答案:

答案 0 :(得分:26)

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

解决方案:

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

2)在测试目标

的“构建阶段”选项卡上的“编译源”中添加相同的文件

必须解决问题

答案 1 :(得分:6)

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

在这种情况下,通过添加

解决了问题
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks

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

答案 2 :(得分:5)

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

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

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

答案 3 :(得分: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

希望有帮助!

答案 4 :(得分:2)

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

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

    • 转到文件点击文件。

    • 然后您会看到第一个选项New Click on it。

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

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

    • 如果编译器无法授予您添加权限,请在下面给出第二种方法。

    <强> 2。回答CocoaPod问题:

    • 转到产品单击产品。

    • 点击清洁或按cmd + k。

    • 问题解决了。

答案 5 :(得分:1)

确保在选择测试框架时检查所有模块的目标成员资格。您可以通过选择View-&gt; Utilities-&gt; Show File Inspector

来查看Target Membership选项

答案 6 :(得分: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}"]

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

答案 7 :(得分:1)

就我而言,我正在为一个私人吊舱进行测试,因此在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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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

  1. 选择我的计划
  2. 编辑方案......
  3. 然后在打开Scheme配置窗口时,选择要在此处重定向的名为“Test”的左侧选项卡: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes
  4. 就像你可以看到我的UITests没有添加到这里但存在于我的项目中所以我只需点击加号按钮并选择我的UITests目标如下: enter image description here
  5. 然后点击“添加”按钮并关闭配置视图
  6. 完成一个干净的项目并再次尝试它应该工作
  7. 并且不要忘记验证:enter image description here
  8. 希望这个答案有所帮助。

    PS:最后一次认为我的测试目标在构建设置中我必须检查这些未正确配置的属性:

    btn.style("color", "red");
    

答案 10 :(得分:0)

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

您必须从allBaWords :: String -> [String] allBaWords = filter (isPrefixOf "ba") . words 下的Compiler Sources删除测试文件

如下所示


enter image description here

答案 11 :(得分:0)

检查您的测试班的目标会员资格。

答案 12 :(得分:0)

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

[How to add it]