我最近更新到Xcode 7 beta 5.我尝试在早期项目中添加单元测试,但是我在@testable import myModuleName
行上收到错误消息“没有这样的模块[myModuleName]”。
我试过了
这项工作都没有用(但我已经在另一个项目中进行了测试)。还有其他人有这个问题并解决了吗?
请检查您尝试使用@testable import "ModuleName"
导入的模块名称。 Target->Build Settings-> Product Module Name
上的模块名称应该相同
我的问题是我想要测试的类应该在一个单独的模块(API Client)中,但该类实际上是app目标的成员而不是框架目标。更改类的目标成员资格使导入错误消失!
我有同样的问题。清理构建文件夹并重新启动Xcode不起作用。
对我有用的是确保测试目标和方案的“仅构建活动体系结构”的设置与应用程序的目标和方案的设置相匹配。
对我来说,解决方案是在我将生成设置/包装/产品名称/从$ {TARGET_NAME}中的目标myproject-ios的产品名称更新为myproject后,将@testable导入myproject_ios重命名为@testable import myproject。
当我将部署目标从9.3更改为11.0时,这对我来说是固定的。
常规>部署目标>“11.0”
如果您正在使用xcodebuild并发现此问题,请考虑在工作区标志中添加build命令。
改变了这个
$ xcodebuild -scheme PowToonsTests -destination 'name=iPhone X' test
对此
$ xcodebuild -workspace PowToons.xcworkspace -scheme PowToonsTests -destination 'name=iPhone X' test
在构建设置测试目标中,检查主机测试,它采用PRODUCT_NAME中设置的名称。您应该在测试类中使用该名称。
我建议不要更改PRODUCT_NAME(匹配主要目标的名称)
答案对我有用
答案是我的项目中有一些错误导致构建失败。 (这只是代码中每天的标准错误。)在我修复了错误并进行了另一次清理和构建之后,它就起作用了。
请注意,这些错误最初没有显示出来。让他们出现:
如果还有其他错误,它们现在应该出现。修复它们,然后取消注释Test文件代码。 “没有这样的模块”错误消失了。
如果这不能解决其他人的问题,您还可以尝试以下方法:
清理构建文件夹
打开“产品”菜单,按住“选项”,然后单击“清除构建文件夹...”
确保将“可测试性”设置为“是”
在Project Navigator中,单击您的项目名称。选择Build Settings并向下滚动到Build Options。确保Enable Testability为Yes(用于调试)。
删除并重新添加测试目标
如果你做了其他事情,我的猜测是你可能不需要这样做。但如果你这样做,remember to save any Unit Tests that you have already written.
在Project Navigator中单击您的项目名称。然后选择您的测试目标。单击底部的减号( - )按钮将其删除。
然后单击加号(+)按钮并选择iOS Unit Testing Bundle再将其添加回来。如您所见,您还可以以相同的方式添加UI测试包。
其他一些想法
要么...
如果您发现其他有效的方法,请在下方发表评论或回答。
有关
正如在this answer中所描述的那样,我将Swift测试添加到仅Obj-C项目中。解决方案是添加一个虚拟Swift类,之后Xcode会提示添加一个桥接头,然后删除Swift类。之后一切都很好。
对我来说问题是测试的iOS部署目标没有设置为与主要目标相同。所以一定要检查一下。
在您的测试目标中:
Build Settings -> iOS Deployment Target -> iOS<same as the target you are testing>
所以这就是我在尝试了之前建议的所有建议解决方案后让我的代码工作的方式。
一切都像魅力一样。希望这可以帮助。
需要注意的是,如果你的模块名称中有一个短划线字符-
那么你将不得不用一个下划线而不是_
来引用它。出于某种原因,我怀疑这可能是一个问题,这确实是我的问题。
例如。 @testable import Ocean-Swift
成为@testable import Ocean_Swift
另外一件事,如果你使用@testable
语法,请确保不要在测试目标中包含生产代码。我发现这会导致莫名的怪异。
这听起来是两个目标的构建设置的错误。你需要确保:
ENABLE_TESTABILITY
等于是。PRODUCT_MODULE_NAME
值应与应用程序的值不同。还有一件事要检查:如果你有一个Objective-C项目,但是在Swift中编写单元测试,请确保主目标使用至少一个Swift文件!
更多信息:
我正在开发一个Objective-C项目,但是想在Swift中编写单元测试。
我向主目标添加了一个Swift文件,以生成必要的ProjectName-Bridging-Header.h文件,编写我的测试,一切正常。
后来我删除了Swift文件因为我认为我不需要它(所有主要目标的代码都在Objective-C中......我只是在Swift中编写测试)。
直到后来我做了一个“干净/干净的构建文件夹”并且出现“没有这样的模块”问题之后我才注意到问题。经过一番搔痒后,我添加了一个新的空白Swift文件,问题就消失了。
我已经多次使用/不使用Swift文件进行了测试,它只适用于它...所以,我要么需要在项目中保留空白文件,将一些Objective-C转换为Swift,或者添加一些用Swift编写的项目的新代码。