我最近更新到Xcode 7 beta 5。我尝试在早期的项目中添加一个单元测试,但是我在@可测试的导入myModuleName行上得到了错误消息“没有这样的模块[myModuleName]”。
我试着
使用“选项清理生成文件夹”清理项目 检查“启用可测试性”(调试)在构建选项中设置为“是” 删除测试目标,然后重新添加iOS单元测试包
这些都不适用于这个项目(但是我已经在另一个项目中进行了测试)。有人遇到过这个问题并解决了吗?
我最近更新到Xcode 7 beta 5。我尝试在早期的项目中添加一个单元测试,但是我在@可测试的导入myModuleName行上得到了错误消息“没有这样的模块[myModuleName]”。
我试着
使用“选项清理生成文件夹”清理项目 检查“启用可测试性”(调试)在构建选项中设置为“是” 删除测试目标,然后重新添加iOS单元测试包
这些都不适用于这个项目(但是我已经在另一个项目中进行了测试)。有人遇到过这个问题并解决了吗?
当前回答
在构建设置测试目标中,检查主机测试,它接受PRODUCT_NAME中设置的名称。 您应该在测试类中使用这个名称。
我建议不要更改PRODUCT_NAME(匹配主目标的名称)
其他回答
这是我在Xcode 13.1中使用的方法:
在Xcode Preferences > Locations的Locations选项卡中,我定义了一个自定义位置:
这不仅导致单元测试失败,出现可怕的“没有这样的模块”错误,而且还导致“命令CodeSign失败,退出码非零”和其他警告和错误。
将设置更改为唯一:
解决了所有问题。
我的问题是,我想测试的类应该是在一个单独的模块(API客户端),但类实际上是应用程序目标的成员,而不是框架目标。改变类的目标成员使导入错误消失!
CocoaPods推荐添加inherit!:search_paths到你的测试目标,就像这样:
target 'App' do
target 'AppTests' do
inherit! :search_paths
end
end
来源:https://github.com/CocoaPods/CocoaPods/pull/8423问题——244992565
一个需要注意的问题是,如果你的模块名中有一个破折号,那么你就必须用下划线来代替_。出于某种原因,我怀疑这可能是一个问题,这确实是我的问题。
如。@可测试import Ocean-Swift变成@可测试import Ocean_Swift
还有一件事,如果您确实使用@可测试语法,请确保在测试目标中不包含您的生产代码。我发现这会引起莫名的奇怪。
另一件需要检查的事情:如果你有一个Objective-C项目,但正在用Swift编写单元测试,确保主目标至少使用一个Swift文件!
更多信息:
我当时在做一个Objective-C项目,但想用Swift写单元测试。
我在主目标中添加了一个Swift文件,以生成必要的ProjectName-Bridging-Header.h文件,编写了测试,一切都正常工作。
后来我删除了Swift文件,因为我认为我不需要它(所有主要目标的代码都是Objective-C…我只是在Swift中编写测试)。
直到后来我才注意到这个问题,在我做了一个“清洁/清洁构建文件夹”之后,“没有这样的模块”问题出现了。经过一番思考,我添加了一个新的空白Swift文件,问题就消失了。
我已经测试了很多次,有/没有Swift文件,它只适用于它…所以,我要么需要在项目中留下空白文件,将一些Objective-C转换为Swift,要么添加一些用Swift编写的新代码到项目中。