在Xcodeunit testing中使用@testable时,“没有这样的模块”

我最近更新到Xcode 7testing版5.我试图添加一个unit testing到一个较早的项目,但我收到错误消息“没有这样的模块[myModuleName]” @testable import myModuleName行。

在这里输入图像说明

我试过了

  • 使用Option Clean Build Folder清理项目
  • 在“构build选项”中检查“启用可testing性”(debugging)设置为“是”
  • 删除testing目标,然后重新添加iOSunit testing包

这一切都没有为这个项目工作(但我已经得到testing,在另一个项目工作)。 有没有其他人有这个问题,并解决了它?

请检查您的模块名称,您尝试导入@testable import "ModuleName"Target->Build Settings-> Product Module Name上的模块名称应该相同

这个答案对我有用

答案是我的项目中有一些错误,导致构build失败。 (这只是你的标准,每天在代码中的错误。)当我解决了错误,并做了另一个清理和build设,它的工作。

请注意,这些错误一开始并未显示出来。 要让他们出现:

  • 注释掉你的整个testing文件,给你“没有这样的模块”的错误。
  • 尝试再次运行您的项目。

如果还有其他错误,现在应该显示出来。 修复它们,然后取消注释您的testing文件代码。 “没有这样的模块”的错误已经没有了我。


如果这不能解决其他人的问题,您也可以尝试以下方法:

清理生成文件夹

打开产品菜单,按住选项 ,然后点击“清理生成文件夹…”

在这里输入图像说明

确保启用testing性设置为是

在Project Navigator中点击你的项目名称。 select生成设置,然后向下滚动到生成选项。 确保“启用可testing性”为“是”(用于debugging)。

在这里输入图像说明

删除并重新添加您的testing目标

如果你已经做了其他的事情,我的猜测是,你可能不需要这样做。 但是,如果你这样做, 记得保存你已经写好的unit testing。

在Project Navigator中点击您的项目名称。 然后select您的testing目标。 点击底部的减号( – )button将其删除。

在这里输入图像说明

然后点击加号(+)button,然后selectiOSunit testing包再次添加它。 正如你所看到的,你也可以用相同的方式添加一个UI Testing Bundle。

其他一些想法

  • 确保所有必需的类都是您的testing目标的成员。
  • 确保你已经添加了所有必需的库。
  • 确保模块名称的写法正确(参见本答案 )。

要么…

如果您发现其他工作,请在下面留言或回答。

有关

  • 如何在Xcode中进行unit testing
  • Xcode UItesting示例

所以这就是我在尝试所有build议的解决scheme之后,让我的代码工作的方法。

  • 我在项目的“生成设置”中将“启用可testing性”设置为“是”
  • 我也在项目的Build Settings中将“Defines Module”定义为“YES”。
  • 对于我的项目中的常规.swift文件(比如说MyApp) ,我要编写testing用例,我同时Target Membership下面选中了主“ MyApp ”和“ MyAppUnitTests ”目标。
  • 然后,我select了我的unit testing文件,在' import XCTest '的顶部声明' @testable import MyApp ',并且检查Target member下的“MyAppUnitTests”

一切都像魅力一样。 希望这可以帮助。

需要注意的一点是,如果你的模块名称中有一个破折号字符,那么你将不得不用一个下划线来引用它。 出于某种原因,我怀疑这可能是一个问题,这确实是我的问题。

例如。 @testable import Ocean-Swift变成@testable import Ocean_Swift

还有一件事,如果你使用@testable语法,一定不要把你的生产代码包含在你的testing目标中。 我发现这会造成莫名其妙的怪异感。

对我来说问题是testing的iOS部署目标没有被设置为与主要目标相同。 所以一定要检查这个。

在你的testing目标中:

 Build Settings -> iOS Deployment Target -> iOS<same as the target you are testing> 

我的问题是,我想testing的类应该是在一个单独的模块(API客户端),但类实际上是应用程序目标的成员,而不是框架目标。 更改class级的目标成员资格导致导入错误消失!

确保在testingscheme的构build设置下,testing目标在列表中。

在播放button旁边,selecttestingscheme,然后select编辑scheme…,进入构build部分,点击加号并select您要testing的目标。

在我的情况下,我们有一个内部的目标,我们开发(一些小的差异),合并后,它被从testingconfiguration中删除。

编辑测试方案

这听起来是两个目标的构build设置的错误。 您需要确保:

  • 两个目标的ENABLE_TESTABILITY等于Yes。
  • testing目标的PRODUCT_MODULE_NAME值应该与应用程序的不同。

环境: Xcode版本9.0(9A235)
场景:testing一个开源框架。

我有同样的问题:'没有这样的模块'。

解:

  1. selecttesting目标。
  2. select构build阶段
  3. 通过链接二进制添加要testing的框架…

在这里输入图像说明

这里是testing文件: 在这里输入图像说明

还有一件事要检查:如果你有一个Objective-C项目,但是在Swift中编写unit testing,请确保主目标至less使用一个Swift文件!


更多信息:

我正在做一个Objective-C项目,但是想在Swift中编写unit testing。

我添加了一个Swift文件到主要的目标来生成必要的ProjectName-Bridging-Header.h文件,写了我的testing,一切工作正常。

后来我删除了Swift文件,因为我认为我不需要它(主目标的所有代码都在Objective-C中…我只是在Swift中编写testing)。

我没有注意到一个问题,直到后来,我做了一个“干净/干净的生成文件夹”和“没有这样的模块”的问题出现了。 经过一些头抓挠,我添加了一个新的空白Swift文件,问题就消失了。

我已经用/不用Swift文件多次testing过它,它只能用于它…所以,我要么需要保留项目中的空白文件,将一些Objective-C转换成Swift,或者添加一些在Swift中编写的项目的新代码。

我有同样的问题。 清理生成文件夹并重新启动Xcode不起作用。

我的工作是确保testing目标和scheme的“仅构build活动架构”的设置与您应用的目标和scheme的设置相匹配。

除了列出的其他东西,我不得不添加文件与我试图testing我的编译源unit testing模块 在这里输入图像说明

对于我来说,解决方法是在将Build Settings / Packaging / Product Name /从$ {TARGET_NAME}更新到myproject的目标myproject-ios的产品名称后,将@testable import myproject_ios重命名为@testable import myproject。

正如在这个答案中所描述的,我将Swifttesting添加到Obj-C唯一项目中。 解决scheme是添加一个虚拟的Swift类,之后Xcode会提示添加一个桥接头,然后删除Swift类。 之后一切都很好。