2016-01-05 32 views
0

我有一個帶有計算變量的模型對象。現在我想測試變量的setter。我寫了一個測試案例,它提供了以下錯誤XCTest用於模型對象中的測試設置器

XCTAssertEqual失敗:( 「無」),不等於( 「可選(」 [email protected] 「)」) -

波紋管我已經提到,我寫了

func testNetworkModelObjectSet() { 

    let testObject = ["network": ["first_name": "Dimuth", "last_name": "Lasantha", "business_email": "[email protected]", "currency": "USD", "language": "en-us", "category": "individual"]] 

    let network = HVConnection(data: testObject) 

    network.business_email = "[email protected]" 

    XCTAssertEqual(network.business_email, "[email protected]") 
} 

這裏我提到變量相關的模型對象的測試用例

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!] 
     } 
    } 
} 
+0

你應該使用'XCTAssertEqualObjects'爲對象,'XCTAssertEqual'是原始類型,如'int','字符','double'等。 – rckoenes

+1

@rckoenes Swift的'XCTest'沒有'XCTAssertEqualObjects'。 – Cristik

+0

@Cristik你是對的,切換到兩者之間。 – rckoenes

回答

1

您正在閱讀_data["network"]["business_email"],但正在寫入_data["business_email"]。您應該根據規格更新吸氣劑或設定器。

作爲一個側面說明,你可以重寫以更短的/可讀的方式,吸氣:

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

斯威夫特的optional chaining功能使得它很容易爲您在方法調用鏈爲零。

另請注意,如果傳遞的值爲nil,setter將使應用程序崩潰,因爲嘗試展開nil時強制解包崩潰。

0

通過設置network.business_email = "[email protected]"您覆寫的內容_data["business_email": newValue!]

這將使得吸氣劑返回nil,因爲它將進入else的情況,因爲_data.objectForKey("network")nil。因此,行爲如預期。

0

我已經改變了二傳手如下

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

現在測試用例通過

+0

這裏發佈的答案之一是否幫助您達成此解決方案? – Cristik

相關問題