如何在Swift中断言对象实例化?

时间:2016-06-16 09:14:12

标签: xcode swift tdd instantiation xctest

所以我想编写一个测试来声明已经创建了一个类的实例。我最初的反应是编写一个测试来检查接收类为null的变量,但是有人指出这在Swift中不起作用因为选项,并且如果我打开包含null的东西,程序将崩溃。

那么如何测试是否已正确创建类或任何对象?

我在Xcode 7中使用Swift 2.2。

如果低估,请告诉我问题或格式有什么问题。

3 个答案:

答案 0 :(得分:0)

如果让Swift方式做这种事情:

if let object = MyObject.init() {
    //the object exists
} else {
    //the object is nil
}

答案 1 :(得分:0)

如果你在XCTest的上下文中谈论,如果你想测试以确保它被实例化,你可以这样做:

func testMyObjectInstantiation() {
    let object = MyObject(value: 42)
    XCTAssert(object != nil, "instantiation failed")
}

或者

func testMyObjectInstantiation() {
    let object = MyObject(value: 42)
    XCTAssertNotNil(object, "instantiation failed")
}

答案 2 :(得分:0)

最好的解决方案是守卫声明

保护

使用guard let语句可以检查一个值是不是nil,否则执行else块si。在else块中,您必须使用fatalErrorthrowreturn停止执行当前代码。

guard let num = Int(text) else {
    fatalError()
}

守卫声明之一就是你可以使用checked变量及其类型的下一行不是可选的。

guard let num = Int(text) else {
    fatalError()
}

let next = num + 1
print(next)

查看示例,num的类型为Int,而不是Int?。这意味着如果后卫成功了,我就不需要关心打开。