Swift 测试中@testable导入对象的运行时类型检查

Swift 测试中@testable导入对象的运行时类型检查,swift,tdd,Swift,Tdd,我已经在一些项目中被这个问题困扰,所以我渴望找到一个好的解决方案 考虑以下场景: 我在我的应用程序目标中定义了一个名为MyObject的对象,该对象在MyBusinessLogicObject中使用 在MyBusinessLogicObjectTests中,我已@testable import编辑了我的应用程序包,但在从非通用集合中拉出对象后需要有条件地强制转换: import XCTest @testable import MyApp class MyBusinessLogicObject

我已经在一些项目中被这个问题困扰,所以我渴望找到一个好的解决方案

考虑以下场景:

  • 我在我的应用程序目标中定义了一个名为
    MyObject
    的对象,该对象在
    MyBusinessLogicObject
    中使用
  • MyBusinessLogicObjectTests
    中,我已
    @testable import
    编辑了我的应用程序包,但在从非通用集合中拉出对象后需要有条件地强制转换:

    import XCTest
    @testable import MyApp
    
    class MyBusinessLogicObjectTests: XCTestCase {
    
        var bizLogicObject: MyBusinessLogicObject!
    
        // setUp() etc.
    
        func testStuff() {
            guard let result = bizLogicObject.someOrderedCollectionProperty.first as? MyObject else {
                XCTFail()
                return
            }
    
            // more test code here
        }
    }
    
问题是,即使我可以看到bizLogicObject.someOrderedCollectionProperty的类型,但首先是
MyObject
条件转换失败。

我理解这是因为当你像这样
@testable import
时,你应用程序中的所有类型都会被复制。因此,运行时检查实际上针对两种不同的类型,这就是它失败的原因


是否有人知道如何使测试中的条件强制转换通过,而您需要强制转换到应用程序中定义的类型?

确保
MyObject
仅包含在应用程序目标中,而不同时包含在应用程序目标和测试目标中。

您找到解决方案了吗?我也面临着这个问题。。