如何在 swift 测试中使用用户定义的配置变量作为 @testable 导入中的模块名称?
How to use a user defined config variable as module name in @testable import in a swift test?
我有一个用户定义的变量 "MODULE_NAME_WITH_SUFFIX",每个模式都不同。
现在我需要在我的测试中导入这个模块名称,但不知道如何。
在我进行简单导入之前:
@testable import MyApp
现在我想使用类似的东西:
@testable import $(MODULE_NAME_WITH_SUFFIX)
这在 Swift 中有可能吗?
可能不会,但以后是否可以通过编程方式导入模块?
不幸的是,这在 Swift 中是不可能的。但是,您可以在 Objective-C 中使用预处理器执行此操作,因为实际的 header 名称将在编译时被替换。不过,这当然会要求您在 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 >
不用给它设值,用#if不能比较值
在 Test-Target 的构建设置中,您可以像这样使用 MODULE_NAME_WITH_SUFFIX:
# before
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MyApp.app/MyApp";
# after
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/$(MODULE_NAME_WITH_SUFFIX).app/$(MODULE_NAME_WITH_SUFFIX)";
然后在从 XCTestCase 派生的每个 class 中,添加这个怪物而不是正常导入:
#if ABC_SCHEMA_ACTIVE
@testable import MyAppABCSuffix
#elseif XYZ_SCHEMA_ACTIVE
@testable import MyAppXYZSuffix
#else
@testable import MyApp
#endif
测试愉快!
另一种选择是使用 canImport
作为条件。
#if canImport(MyApp)
@testable import MyApp
#endif
#if canImport(MyApp_Dev)
@testable import MyApp_Dev
#endif
我有一个用户定义的变量 "MODULE_NAME_WITH_SUFFIX",每个模式都不同。
现在我需要在我的测试中导入这个模块名称,但不知道如何。
在我进行简单导入之前:
@testable import MyApp
现在我想使用类似的东西:
@testable import $(MODULE_NAME_WITH_SUFFIX)
这在 Swift 中有可能吗?
可能不会,但以后是否可以通过编程方式导入模块?
不幸的是,这在 Swift 中是不可能的。但是,您可以在 Objective-C 中使用预处理器执行此操作,因为实际的 header 名称将在编译时被替换。不过,这当然会要求您在 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 >
不用给它设值,用#if不能比较值
在 Test-Target 的构建设置中,您可以像这样使用 MODULE_NAME_WITH_SUFFIX:
# before
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MyApp.app/MyApp";
# after
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/$(MODULE_NAME_WITH_SUFFIX).app/$(MODULE_NAME_WITH_SUFFIX)";
然后在从 XCTestCase 派生的每个 class 中,添加这个怪物而不是正常导入:
#if ABC_SCHEMA_ACTIVE
@testable import MyAppABCSuffix
#elseif XYZ_SCHEMA_ACTIVE
@testable import MyAppXYZSuffix
#else
@testable import MyApp
#endif
测试愉快!
另一种选择是使用 canImport
作为条件。
#if canImport(MyApp)
@testable import MyApp
#endif
#if canImport(MyApp_Dev)
@testable import MyApp_Dev
#endif