我的单元测试.pch文件中包含以下内容,以使我的单元测试可以为本地化文件找到正确的 bundle 软件,并且在我升级到Xcode8之前,它工作正常。

#undef NSLocalizedString
#define NSLocalizedString(key, comment) [[NSBundle bundleWithIdentifier:@"Tests-Unit"] localizedStringForKey:(key) value:@"" table:nil]

现在,我得到警告
Ambiguous expansion of macro NSLocalizedString

这就可以解释为什么我的单元测试失败了,因为它们再也找不到本地化的字符串值了。

有什么想法吗?我现在需要做些不同的事情吗?

编辑:
我觉得这与我的所有源文件都在中有关2个目标,即一个用于项目,一个用于单元测试,这就是我们设置它的方式。我正在尝试清理并从单元测试目标中删除我的所有源文件,并添加了
@testable import ProjectName

而不是一个单元测试文件,以便能够访问我的代码进行测试,但是我现在正在
File 'MyFile.swift' is part of module 'ProjectName'; ignoring import.

最佳答案

最终我又恢复了一切。

假设我们的项目名为 Panda ,它由Obj-C和Swift文件组成。所有这些文件都在我们的 Panda PandaTests 目标中。

步骤1:确保您的所有文件具有正确的目标成员身份,即 Panda 目标:仅源文件,开发框架,图像等和 PandaTests 目标:仅测试文件,测试框架,模拟数据等

步骤2:确保您的 Panda 项目具有 Build Settings-> Enable Testability设置为Yes

步骤3:确保您的 PandaTests 项目的构 build 置->产品模块名称设置为PandaTests

步骤4:
按住“选项”按钮,然后单击“产品”,以进行良好的清洁。您应该看到清洁构建文件夹选项。

步骤5:
对于Swift单元测试,添加@testable import Panda。由于我们现在已经从 PandaTests 目标中删除了所有源代码文件,因此单元测试需要一种访问项目文件的方式。这样一来,我们的Swift单元测试就可以访问所有Swift文件以及 Panda-Bridging-Header.h 中包含的Obj-C文件。

07-24 22:34