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

时间:2017-05-10 11:53:15

标签: swift tdd

我现在已经在一些项目中被这个问题所困,所以我很想找到一个好的解决方案。

考虑以下情况:

  • 我在我的应用目标中定义了一个名为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 个答案:

答案 0 :(得分:-1)

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