【发布时间】:2019-08-29 18:10:15
【问题描述】:
我在目标 c 中声明了一个类,如下所示:
@interface Person : NSObject
@property (nonatomic, readonly) NSString* firstName;
@property (nonatomic, readonly) NSString* lastName;
@end
而且我在 Swift 中声明了一个扩展,以获得Person 的全名:
extension Person {
var fullName: String {
return "\(firstName) \(lastName)"
}
}
我想编写单元测试,我想在其中使用扩展名测试此人的全名。因此我创建了一个模拟子类,并覆盖了fullName 属性。但是,为了这样做,我必须使用 @objc 关键字将扩展暴露给目标 c 运行时。
有没有办法只为单元测试目标将扩展标记为@objc?标记扩展是否具有“显着”的编译/运行时影响?
我尝试添加一个 Swift 编译时间标志,例如:
#if UNIT_TEST_TARGET_RUNNING
@objc
#endif
但这会导致编译时错误。欢迎任何建议! 请注意,示例为了呈现问题而进行了简化,并且无法更改目标 c 接口。
【问题讨论】:
-
我认为如果你在 #if 中使用 if else micro 声明变量两次,它会起作用,但我建议要么公开它,要么不公开它,不要让测试环境与真实环境不同案例,因为如果是这样,那么测试就没用了
标签: ios objective-c swift unit-testing