2017-03-15 45 views
0

我有2個變量,爲了確保兩個變量不是同一時間,一個變量不能無零傳遞單元測試。Swift UnitTesting測試2個可選變量

以下代碼可以測試一個對象不爲零。

我已經2個變量DataArray中& dataObject時我只是想確保 同時他們中的一個必須具備價值

CoreWebService.sendRequest(requestURL: WebURL.testFeed, paramters: params) { (sender: RequestCallback<BaseResponse<DataJson>>) in 

     switch sender { 
     case .failed(let error): 
      XCTFail("Error\(error.localizedDescription)") 
      break 
     case .success(let object): 
      XCTAssertNotNil(object.dataArray, "data must not nil") 
      break 
     } 
     xctExpect.fulfill() 

    } 
    waitForExpectations(timeout: timeout) { (error) in 
     XCTAssertNil(error, "Test time out\(error?.localizedDescription)") 
    } 

回答

1

如果您有不同類型的兩個可選屬性,例如ab,您可以將的元組切換爲case (.none, .none),這對應於兩個屬性nil。如果不符合這種情況,至少有一個屬性不是nil)。例如。

let a: Int? = 1 
let b: String? = nil 

// ... 

switch (a, b) { 
    case (.none, .none): XCTFail("...") // fail case 
    case _ :() // otherwise _at least_ one of 'a' and 'b' 
       // is non-nil 
} 

或者,乾脆

// fail case w.r.t. 'nil'-ness? 
if case (.none, .none) = (a, b) { 
    XCTFail("...") 
} 

如果同時你可選屬性是相同類型的,說Int?,那麼你可以簡單地測試了nil -ness表達a ?? b的,這將是nil只有在ab都是nil

let a: Int? = 1 
let b: Int? = nil 

// ... 

XCTAssertNotNil(a ?? b, "Both properties are nil ...") 
+0

非常感謝你:) –

+0

,如果你能對這個問題看,我被困在太 的http://計算器.com/questions/42778641/objectmapper-array-or-object-based-data –

1

你可以嘗試flatMap這樣的...

let dataArray: [String]? = ["a", "b"] 
let dataObject: Int? = nil 

// Create an array of your objects 
let allObjects: [Any?] = [dataArray, dataObject] 

// Use flatMap to return an array of non-nil objects 
let nonNil = allObjects.flatMap({$0}) 

// Check count is > 0 
XCTAssertGreaterThan(nonNil.count, 0) 
+1

非常感謝你,你的答案也可以,但我只能接受一個! –

+0

如果你可以看看這個問題,我也堅持這一點 http://stackoverflow.com/questions/42778641/objectmapper-array-or-object-based-on-data –