簡體   English   中英

如何為單元測試設置一個Swift + Objective-C項目

[英]How should a Swift + Objective-C project be setup for Unit Testing

我發現很難在Xcode 6b4中配置測試目標。 在這種情況下,有人可以指出我正確的方向嗎?

我有一個主要是Swift項目。 但是,存在一些第三方的Objective-C依賴關系,這些依賴關系被放入應用程序的橋接標頭中。 我想為我的Swift代碼編寫測試。 理想情況下,在Swift中。 我的問題是這個。

  1. 如果我創建一個Swift測試用例,則編譯器會抱怨它在應用程序的橋接頭中找不到Objective-C頭。

  2. 如果創建一個Objective-C測試用例,則無法導入要測試的Swift類。

我唯一能做的就是編寫Objective-C測試用例,它不會涉及任何Swift。 由於與Objective-C的依賴關系,我無法編寫“純粹的Swift代碼/測試”。

是否有人對此有任何建議或成功。 還是這是Beta 4中的當前狀態?

我不確定您是否仍在尋找它,因為Xcode 6不再處於beta中,但是您可以在目標設置中將Objective-C橋接頭文件添加到單元測試目標中。 這為我解決了這個問題。

Objective-C橋接標題Xcode設置

從Xcode 6 Beta 4 發行說明中已知的問題:

測試中

•用Objective-C編寫的單元測試當前無法為應用程序目標導入Swift生成的接口標頭(“ $(PRODUCT_MODULE_NAME)-Swift.h”),因此不能用於測試需要此標頭的代碼。 (16931027)

•解決方法:Swift代碼的單元測試應使用Swift編寫。 用Objective-C編寫的針對框架目標的單元測試可以通過使用'@import FrameworkName;'導入框架模塊來訪問Swift生成的接口。

因此,您目前無法在Objective-C中測試Swift代碼。

同樣從發行說明中:

訪問控制系統的局限性在於,除非將單元測試標記為公共,否則它們不能與應用程序中的類和方法進行交互。 這是因為單元測試目標不是應用程序模塊的一部分。

克里斯·拉特納曾表示在這個帖子上的開發者論壇,他們仍在評估局勢,看看他們是如何調解單元測試和新近實施的訪問控制。

因此,我期望在Swift本身以及使用Swift和Objective-C的項目中對單元測試進行許多更改。

我們進行了這項工作,一路上看到了所有可能的錯誤:從情節提要中獲取VC時出現模塊名稱錯誤,特定於coredata實體的MyType_MyType_錯誤等等,但這是最糟糕的。

訣竅是使用構建目標中的-Swift.h文件而不是測試目標,因為有時在測試目標中您必須包含objc文件但不包括swift文件,如果將它們鏈接在一起,objc將無法識別這些文件,但是在構建目標一切都在那里。

  • 首先,要確保測試目標的-Swift.h與構建目標的名稱不同。

  • 在測試.pch或每個單獨的文件中包括-Swift from debug target。

  • 通過使用$(OBJROOT)/MyProjectName.build/Debug-iphonesimulator/MyProjectTarget.build/DerivedSources編輯用戶標頭搜索路徑,使編譯器知道該文件在派生源中的位置。如果不確定,請直接在inFinder中查找名稱。 如果名稱中有空格,則需要在空格前添加\\

  • 您可以在此處找到有關項目變量的更多信息: 如何在Xcode項目中打印“構建設置”列表?

  • 始終搜索用戶路徑應設置為是

  • 不要在測試目標中包含swift文件,而是使用@testable

我希望蘋果能在下一個xcode中解決此問題。

我通過將“ Objective-c生成的接口頭名稱”更新為“ YourApplication-Swift.h”來進行工作

默認情況下,此設置是生成TargetName-Swift.h,編譯器從不生成YourApplicaitonTest-Swift.h

當試圖找出如何從我的Swift測試訪問項目的Swift代碼時,我遇到了這個問題。 我的項目和測試都最初是在Objective-C中啟動的,因此它們具有所有橋接標頭設置。

為了從我的項目訪問Swift類,我必須添加:

@testable import MyProjectName

在我的Swift測試文件的頂部。 在為測試構建它之后,Xcode識別了我的快速代碼。

希望對您有所幫助。

我遇到了這個問題,並嘗試在測試目標的構建設置中解決它。 通過更改搜索路徑,導入swift標頭,在橋接標頭中導入內容。 但是事實證明是在我的podfile中。 我必須在測試目標中添加一個link_with 像這樣:

platform :ios, '8.0'
link_with 'YourApp', 'YourAppTests'
pod 'ThePopularPod', '1.2.3', :inhibit_warnings => true

為了使Xcode 10在Obj-C測試中具有swift類,您需要在測試目標的用戶搜索路徑中添加自動生成的標頭Module-Swift.h

轉到測試目標>構建設置>標頭搜索路徑,然后在其中添加$ CONFIGURATION_TEMP_DIR / YourProject.build / DerivedSources

有關其他參考,請查看與Objective-C和Swift類一起使用的iOS測試

嘗試將#import "xyz-Swift.h"語句放入預編譯的頭文件中。 這樣,對於所有Obj-C標頭,您就有不同的import語句,具體取決於目標:

MyProject-Prefix.pch(應用程序目標):

#import "MyProject-Swift.h"

MyProjectTests-Prefix.pch(測試目標):

#import "MyProjectTests-Swift.h" 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM