【问题标题】:Swift too smart? Checking an objects type when testing with XCTest斯威夫特太聪明了?使用 XCTest 测试时检查对象类型
【发布时间】:2014-11-01 17:14:36
【问题描述】:

我知道有很多关于如何使用 Swift 获取对象类型的问题。

例如:How do you find out the type of an object (in Swift)?

我想找到类型的原因是我可以测试在单元测试中是否返回了正确的东西。前提是如果有人更改它,测试将失败,我们会知道要更加小心。

Swift 有is 方法,它返回一个关于对象是否属于某种类型的布尔值。我想用is,然后断言响应为真。

然而,正如这里 (http://www.raywenderlich.com/74138/swift-language-faq) 所述,并在实践中显示......这会引发错误:

错误:'is' 测试始终为真

关键是它现在返回 true.. 我正在编写一个测试,所以情况总是如此。愚蠢的斯威夫特。

有什么想法可以使用 XCTest 和 swift 测试响应的类型吗?

谢谢

【问题讨论】:

    标签: ios unit-testing swift xctest


    【解决方案1】:

    要避免 Swift 过于聪明,请将您正在测试的项目转换为输入 Any 然后进行测试。例如,如果你想断言函数 fred() 返回一个 Int

    func fred() -> Int {
        return 3
    }
    
    assert((fred() as Any) is Int)
    

    在 Playground 中尝试此操作,然后将返回类型更改为 Float,断言将触发。

    【讨论】:

      【解决方案2】:

      如果您在 let 声明中明确了类型,也许您不需要做任何更复杂的事情?

      let fred: Int = fred()
      

      当然,它会阻止您的测试在运行时编译而不是失败。但它传达的是相同的“此测试中的某些内容不再像预期的那样!”

      【讨论】:

        【解决方案3】:

        只需使用 is 运算符:

        XCTAssertTrue(viewController  is HomeViewController)
        

        【讨论】:

          猜你喜欢
          • 2016-04-04
          • 2017-07-22
          • 2017-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-13
          相关资源
          最近更新 更多