XCTestCase 可选实例变量

Posted

技术标签:

【中文标题】XCTestCase 可选实例变量【英文标题】:XCTestCase optional instance variable 【发布时间】:2018-02-01 12:23:12 【问题描述】:

当我将可选实例变量设置为非 nil 时,为什么它是 nil?

代码:

class FooTests: XCTestCase 
    var foo: Int?

    func test_A_setFoo() 
        XCTAssertNil(foo)
        foo = 1
        XCTAssertNotNil(foo)
    

    func test_B_fooIsNotNil() 
        XCTAssertNotNil(foo)
    

test_A_setFoo()succeeds 而test_B_fooIsNotNil() 失败

【问题讨论】:

只使用静态属性。 【参考方案1】:

来自Flow of Test Execution (强调):

对于每个类,测试从运行类设置方法开始。对于每个测试方法,分配一个新的类实例并执行其实例设置方法。之后它运行测试方法,然后是实例拆卸方法。该序列对类中的所有测试方法重复。在类中的最后一个测试方法拆解运行后,Xcode 执行类拆解方法并移动到下一个类。重复此序列,直到所有测试类中的所有测试方法都已运行。

在您的情况下,test_B_fooIsNotNil() 在新实例上执行, 其中foo 属性为nil

常用设置代码可以放入setUp()类方法中 或setUp() 实例方法,请参阅 Understanding Setup and Teardown for Test Methods

【讨论】:

够清楚:) 我一直在单元测试中避免使用实例变量,因为我不知道这一点。这真的改变了一切。

以上是关于XCTestCase 可选实例变量的主要内容,如果未能解决你的问题,请参考以下文章

实例化的可选变量在 Xcode 调试器中显示为 nil

为啥在同一个 XCTestCase 中的单元测试之间会有一个新的对象实例?

将实例变量传递给装饰器

如何将实例变量从 React 组件传递到其 HOC?

php实现验证邮箱格式的代码实例

即使在分配值后显示 nil 的弱可选变量?