如何在swift测试中使用用户定义的配置变量作为@testable import中的模块名?

如何在swift测试中使用用户定义的配置变量作为@testable import中的模块名?,swift,xctest,Swift,Xctest,我有一个用户定义的变量“MODULE_NAME_WITH_SUFFIX”,它在每个模式中都是不同的 现在我需要在测试中导入这个模块名,但不知道如何导入 在我进行简单导入之前: @testable import MyApp 现在,我想使用如下内容: @testable import $(MODULE_NAME_WITH_SUFFIX) 这在斯威夫特有可能吗 可能不会,但以后是否可以通过编程方式导入模块?不幸的是,在Swift中不可能这样做。但是,您可以在Objective-C中使用预处理器执行

我有一个用户定义的变量“MODULE_NAME_WITH_SUFFIX”,它在每个模式中都是不同的

现在我需要在测试中导入这个模块名,但不知道如何导入

在我进行简单导入之前:

@testable import MyApp
现在,我想使用如下内容:

@testable import $(MODULE_NAME_WITH_SUFFIX)
这在斯威夫特有可能吗


可能不会,但以后是否可以通过编程方式导入模块?

不幸的是,在Swift中不可能这样做。但是,您可以在Objective-C中使用预处理器执行此操作,因为实际的头名称将在编译时替换。当然,这将要求您使用Objective-C编写测试。

到目前为止,只有这样做有效:

在项目的生成设置中,转到活动编译条件,并将这些字段添加到方案中

在每个架构配置中创建一个唯一的变量:

# in debug scheme 1
DEBUG ABC_SCHEMA_ACTIVE

# in debug scheme 2
DEBUG XYZ_SCHEMA_ACTIVE

# in debug scheme 3
DEBUG

# in release scheme 1
ABC_SCHEMA_ACTIVE

# in release scheme 2
XYZ_SCHEMA_ACTIVE

# in release scheme 3
< nothing >
然后,在从XCTestCase派生的每个类中,而不是在普通导入中添加以下怪物:

#if ABC_SCHEMA_ACTIVE
    @testable import MyAppABCSuffix
#elseif XYZ_SCHEMA_ACTIVE
    @testable import MyAppXYZSuffix
#else
    @testable import MyApp
#endif

快乐测试

也许可以编写Swift测试,导入Objective-C中的模块,并导入动态模块名称?嗯,有点复杂,但可能会起作用,如果您尝试的话,我很想听到结果!虽然没有真正起作用,但我找到了一个暂时可行的解决方案。。谢谢你的意见!对我来说工作就像做梦一样。
#if ABC_SCHEMA_ACTIVE
    @testable import MyAppABCSuffix
#elseif XYZ_SCHEMA_ACTIVE
    @testable import MyAppXYZSuffix
#else
    @testable import MyApp
#endif