由於與不能夠在多個目標
當編譯相同斯威夫特代碼的不同目標部分執行子類的問題時,編譯器實際上產生不同類別。所以它的行爲如同設計,但在運行應用程序的單元測試時幾乎肯定不是你想要的。
有兩種方法,我建議您設置模式,讓測試:
1.公共模式(推薦)
在你的應用目標:
import RealmSwift
public class MyModel: Object {}
此代碼應該只有被編譯爲應用程序目標的一部分,並且您的單元測試可以按以下方式設置:
import MyApp
// should be able to access `MyModel`
夠簡單嗎?
2. @Testable(SWIFT 2只)
這種方法依賴於@testable
關鍵字夫特2.
引入。在你的應用程序的目標:
import RealmSwift
internal class MyModel: Object {} // ACL cannot be `private`
再次,此代碼應只有被編譯爲您的應用程序目標的一部分,並且您的單元測試可以按以下方式設置:
@testable import MyApp
// should be able to access `MyModel`
確保MyApp的內部版本設置Enable Testability
設置爲YES
。
如果您正在構建一個框架,而該框架的用戶無法訪問某些內部模型,則此方法可能優於公共模型。
領域都有自己的文檔,詳細說明這些常見的方法來測試,你可以在這裏閱讀專用部分:https://realm.io/docs/swift/latest/#avoid-linking-realm-and-tested-code-in-test-targets
正確的,我*可*使用@testable,但文件的訪問我的模型從內MyApp的可以在編譯MyAppTests如果不是從我的測試訪問爲MyModel!非常令人沮喪 – styler1972
聽起來像你的項目配置有問題。如果我不得不猜測,我會說模型文件正在與單元測試目標進行編譯,但不是應用程序目標。如果您將項目發送到[email protected],我很樂意查看它。 – jpsim
嘿,事實證明,我不得不停止針對我的整個MyApp模塊的測試..堅果,它不工作! – styler1972