用于测试模型对象的 XCTest

Posted

技术标签:

【中文标题】用于测试模型对象的 XCTest【英文标题】:XCTest for test model objects 【发布时间】:2016-01-04 10:31:05 【问题描述】:

下面我提到了我的模型对象。

class HVConnection: NSObject 

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

    // MARK:- Init

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

    // MARK:- Properties
    var last_name: String? 
        if let lastNameObject = _data.objectForKey("last_name") 
            return (idObject as! String)
         else 
            return nil
        
    

然后我实现了一个测试用例来检查变量。 下面我提到了测试用例。

func testNetworkModelObject() 

    let connectionObject = ["network": ["first_name": "Dimuth", "last_name": "Lasantha", "business_email": "example@gmail.com", "currency": "USD", "language": "en-us", "category": "individual"]]
    let modelObject = HVConnection(data: connectionObject)

    XCTAssertEqual(modelObject.last_name, "Lasantha")

下面我已经提到了错误

XCTAssertEqual 失败:("nil") 不等于 ("Optional("Lasantha")")

请帮我解决问题

【问题讨论】:

当您创建模型对象时,您执行modelObject.last_name 是否返回正确的值?我想也许你传递给它的字典只有一个带有“网络”的键/值 【参考方案1】:

你的问题是你不能用

_data.objectForKey("last_name")

在您的HVConnection 中,因为它嵌套在另一个名为network 的字典键中。

所以改为使用:

// MARK:- Properties
var last_name: String? 
    if let lastNameObject = _data.objectForKey("network")?.objectForKey("last_name") 
        return (lastNameObject as! String)
     else 
        return nil
    

这是为了演示正在使用的字典:

["network": // your dictionary is a dictionary within a dictionary
    ["first_name": "Dimuth", 
     "last_name": "Lasantha", 
     "business_email": "example@gmail.com", 
     "currency": "USD", 
     "language": "en-us", 
     "category": "individual"]
]

为了获取您的last_name,您必须获取键 network 的字典以获取实际字典,一旦您拥有该字典,您可以检查从 network 键返回的字典密钥last_name

【讨论】:

以上是关于用于测试模型对象的 XCTest的主要内容,如果未能解决你的问题,请参考以下文章

用于单元测试 Objective-C XCTest 的 .m 文件中的访问变量定义

XCTest 应用程序测试和权限警报

使用 Realm 进行 Swift XCTest UI 测试

如何使用 XCTest 框架测试基于 REST 的原生 iOS 应用程序?

xctest - 预处理器宏

如何从 XCTest 中的 UI 目标调用主目标中的方法?