模型对象

时间:2016-01-05 16:26:38

标签: ios xcode swift xctest

我有一个带有计算变量的模型对象。现在我想测试变量的setter。我写了一个测试用例,它给出了以下错误

  

XCTAssertEqual失败:(“nil”)不等于(“Optional(”example@gmail.com“)”) -

我已经提到了我写的测试用例

func testNetworkModelObjectSet() {

    let testObject = ["network": ["first_name": "Dimuth", "last_name": "Lasantha", "business_email": "testemail@gmail.com", "currency": "USD", "language": "en-us", "category": "individual"]]

    let network = HVConnection(data: testObject)

    network.business_email = "example@gmail.com"

    XCTAssertEqual(network.business_email, "example@gmail.com")
}

这里我提到了相关的模型对象变量

class HVConnection: NSObject {

    //private var _data: NSMutableDictionary
    private var _data: NSMutableDictionary

    // MARK:- Init

    init(data: NSDictionary)
    {
        _data = NSMutableDictionary(dictionary: data)
    }

    var business_email: String? {

        get {
            if let businessemailObject = _data.objectForKey("network")?.objectForKey("business_email") {
                return (businessemailObject as! String)
            } else {
                return nil
            }
        }

        set {
            _data = ["business_email": newValue!]
        }
    }
}

3 个答案:

答案 0 :(得分:1)

您正在阅读_data["network"]["business_email"],但写信给_data["business_email"]。您应该根据规范更新getter或setter。

作为旁注,您可以用更短/可读的方式重写getter:

get {
    return _data["network"]?["business_email"] as? String
}

Swift的optional chaining功能使得在方法调用链中检查nil非常容易。

另请注意,如果传递nil值,则setter会使应用程序崩溃,因为在尝试解包nils时强制解包会崩溃。

答案 1 :(得分:0)

通过设置network.business_email = "example@gmail.com",您将使用_data覆盖["business_email": newValue!]的内容。

这将导致getter返回nil,因为它将进入else案例,因为_data.objectForKey("network")nil。因此,行为符合预期。

答案 2 :(得分:0)

我更改了setter,如下所示

set {
        _data = ["network":["business_email": newValue!]]
    }

现在测试用例已通过