2014-06-23 25 views
13

我在MyProjectName文件夾中有一個快速協議IModelIdProvider。 我在MyProjectNameTests文件夾中創建了一個名爲RemoteModelFactoryTest的Objective-C單元測試類。 要做一些測試,RemoteModelFactoryTest必須實現IModelIdProvider協議。使用斯威夫特代碼的客觀C測試類

當我#import "MyProjectName-Swift.h"在我的Objective-C類中使用我的swift協議時,我得到一個file not found

如果我改變#import指令#import "MyProjectNameTests-Swift.h",頭部被發現,但不是我的協議(它在MyProjectName項目中定義,而不是在MyProjectNameTests項目)。

在使用Swift代碼的*Tests項目中有什麼特別的事嗎?

+2

Swift文件是否針對測試包? –

+0

當前的swift文檔或者是錯誤的,或者是Xcode中存在一個錯誤。爲了找到文件,您必須在構建設置中定義「產品模塊名稱」 - 將其設置爲「MyProjectName」,並且您的導入應該可以工作。 –

+0

@AbhiBeckert我試着改變產品模塊名稱,你建議(見[這裏](http://stackoverflow.com/questions/28114772/cant-use-swift-classes-inside-objective-c-unit-test )),但這並沒有幫助到目前爲止。你真的嘗試過配方嗎? – Drux

回答

1

我知道它的額外哈克和一切,但我做了什麼,它的工作原理是從生成的「Project-Swift.h」複製公共標題,並粘貼需要的內容.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等我的測試正在構建的通過測試的銀行代碼頂部。

順便說一句。不要忘記public在Swift中的測試類和方法。

-1

要將一組Objective-C文件導入到與您的Swift代碼相同的框架目標中,您需要將這些文件導入到框架的Objective-C傘形標題中。

導入斯威夫特碼成的Objective-C從同一個框架

在生成設置,在包裝,確保定義模塊設置在該框架的目標設置爲Yes。 導入從框架目標將使用此語法,並替換適當的名稱在該框架內的目標任何Objective-C的.m文件雨燕代碼...

https://developer.apple.com/library/prerelease/ios/documentation/swift/conceptual/buildingcocoaapps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-XID_75

+2

我認爲這不會解決@Morniak的問題。他表示他希望將Project-Target中的Swift文件用於ProjectTest-Target中的Obj-C單元測試。 –