2016-12-06 6 views
0
私は右の私のユニットテストを取得し、トラブルを抱えている

、私はデータが私の構造体であることをチェックしたい、しかし私はテストがあるため失敗がいくつあるかのアイテムプリントアウトする私の機能を得ることができます期待は戻ってこない。 私はユニットテストは良いアイデアである理由あなたが正常に実証されてきたスウィフトユニットテスト:非同期

XCTAssertNotNil(self.players.countPlayers) 

HERESに私の機能のタイトル

public func getPlayer(completionHandler: @escaping (Data?, URLResponse?, Error?) -> (Swift.Void) 
    ) throws{ 
    let jsonUrl: String = "http://api.football-data.org/v1/teams/78/players" 
    //print(jsonUrl) 
    // NSURL sessions allow us to download data using HTTP for APIs 
    // a NSURL which contains a correct resourse 
    guard let leagueURL = NSURL(string: jsonUrl)else{ 
     print("error creating string") 
     throw JSONError.InvalidURL(jsonUrl) 
    } 
    let task = URLSession.shared.dataTask(with: leagueURL as URL) {data, responce, error in 

      do { 
       let json = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSDictionary 
       self.searchLeague = [] 
       for item in json["players"] as! [[String: AnyObject]]{ 
        guard let name = ((item["name"]!) as? String) else{ 
         throw JSONError.InvalidKey("invalid player name") 
        } 
        guard let position = ((item["position"]!) as? String) else{ 
         throw JSONError.InvalidKey("invalid player position") 
        } 
        let jerseyNumber = (((item["jerseyNumber"]!) as? String) ?? ("No Assigned jersey number")) 

        guard let dateOfBirth = ((item["dateOfBirth"]!) as? String) else{ 
         throw JSONError.InvalidKey("invalid player DOB") 
        } 
        guard let nationality = ((item["nationality"]!) as? String) else{ 
         throw JSONError.InvalidKey("invalid player DOB") 
        } 
        let marketvalue = (((item["marketValue"]!) as? String) ?? ("Market value info not available")) 
        self.searchPlayer.append(Player(name: name, position: position, jerseyNumber: jerseyNumber, dateOfBirth: dateOfBirth, nationality: nationality, marketValue: marketvalue)) 
       } 
      }catch{ 
       print("error thrown: \(error)") 
      } 
     print("Num of Players \(self.searchPlayer.count)") 
     } 
    task.resume() 

} 

と私のテスト

func testGetPlayers(){ 
     let expectations = expectation(description: "Wait for exception") 
     try! self.players.getPlayer{_,_,_ in 
      expectations.fulfill() 
    } 
    waitForExpectations(timeout: 5) { error in 
    } 
} 

答えて

2

使用する必要があります知っています。

あなたはgetPlayer方法に重大なバグを見つけた - あなたは完了ハンドラを呼び出すことはありません。

completionHandlerクロージャは、データを正常に処理するかエラーが発生したかによって、getPlayerメソッド内のさまざまな場所から適切な引数を使用して呼び出す必要があります。