我在 MyProjectName
文件夹中有一个快速协议(protocol) IModelIdProvider
。
我在 MyProjectNameTests
文件夹中创建了一个名为 RemoteModelFactoryTest
的 objective-c 单元测试类。
要进行一些测试,RemoteModelFactoryTest
必须实现 IModelIdProvider
协议(protocol)。
当我#import "MyProjectName-Swift.h"
在我的 objective-c 类中使用我的 swift 协议(protocol)时,我得到一个找不到文件
。
如果我将 #import
指令更改为 #import "MyProjectNameTests-Swift.h"
,则会找到 header 但找不到我的协议(protocol)(它在 MyProjectName
项目,不在 MyProjectNameTests
项目中)。
在 *Tests
项目中使用 Swift 代码有什么特别的事情要做吗?
最佳答案
我知道它额外的 hacky 和一切,但我所做的和它的工作是从生成的“Project-Swift.h”复制公共(public) header 并将需要的内容粘贴到.m 测试文件。
所以我复制了这样的东西:
SWIFT_CLASS("_TtC10Inventorum11ImageEntity")
@interface ImageEntity : NSObject <FICEntity>
@property (nonatomic, copy) NSString * imageID;
@property (nonatomic) NSURL * retinaImageURL;
@property (nonatomic) NSURL * nonRetinaimageURL;
@property (nonatomic, readonly) NSURL * imageURL;
@property (nonatomic, readonly, copy) NSString * UUID;
@property (nonatomic, readonly, copy) NSString * sourceImageUUID;
@property (nonatomic) RACSignal * rac_signalForImage;
- (instancetype)init OBJC_DESIGNATED_INITIALIZER;
- (NSURL *)sourceImageURLWithFormatName:(NSString *)formatName;
- (FICEntityImageDrawingBlock)drawingBlockForImage:(UIImage *)image withFormatName:(NSString *)formatName;
- (void)objc_setType:(NSString *)type;
@end
除此之外,我还复制了 SWIFT_CLASS 等的所有宏。我的测试正在构建并通过测试 Swift 代码。
顺便说一句。不要忘记将 public 放在 Swift 中经过测试的类和方法上。
关于ios - 使用 Swift 代码的 Objective C 测试类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24367982/