2017-05-10 51 views
0

现在我已经在一些项目中被这个问题困住了,所以我很想找到一个好的解决方案。测试中@testable导入对象的运行时类型检查

考虑以下情形:

  • 我已经在我的叫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.first的类型是MyObject有条件转换失败。

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

有谁知道如何在测试中获得有条件转换以通过,在哪里需要转换为在您的应用程序中定义的类型?

回答

-1

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