city함수는 딕셔너리에서 "New York"이라는 키 값이 있다면, 해당 City 구조체 값을 반환하고, 없다면 nil을 리턴하는 함수이다
functestCoordinatesOfNewYork() throws {// 1) 객체 생성let calculator =DistancaCaculator()// 2) 테스트하고자하는 city 함수 호출해야함.// 이슈 1 : city는 Optional을 리턴함. 하지만 여기선 not nil을 기준으로 test 필요. 따라서 XCTUnwrap 이용// 이슈 2 : XCTUnwrap함수가 Error를 뱉지만, 그것에 대한 핸들을 따로 해주지 않음 -> 함수에 throws 추가let city =tryXCTUnwrap(calculator.city(forName:"NewYork"))XCTAssertEqual(city.coordinates.latitude, 40.7128)XCTAssertEqual(city.coordinates.longitude, -74.0060) }
distanceInMiles 테스트
functestParisToNewYork() throws {// 1) test를 실행할 때마다 Caculator 객체가 생성되는 것을 방지하기 위해 setUp에서 객체를 생성한다. (13, 16번째 줄)// 2) 두 도시 사이 거리를 계산한다.let distanceInMiles =try calculator.distanceInMiles(from:"Paris", to:"NewYork")// 3) Equal은 아주 정확한 값을 비교해서, 원하는 테스트를 만들어내지 못함// XCTAssertEqual(distanceInMiles, 3636)// 4) accuracy를 이용해서 해결 - accuracy는 1만큼 오차를 허용한다는 의미XCTAssertEqual(distanceInMiles, 3636, accuracy:1) }
functestMilesToParis() {// 1) TabBar가 있다면 (나는 없음) - 탭바로 이동// app.tabBars.buttons["Discover"].tap()// 2) image 스와이프 하는 방법// 빈 곳에 break point를 설정하고, test diamond를 실행한다.// po app, ui element에 대한 정보를 얻을 수 있다. (다만 image label 설정 필요)// po app.images // images에 대한 정보만 얻을 수 잇다let newYorkImage = app.images["New York Image"] newYorkImage.swipeLeft()XCTAssert(app.staticTexts["Paris"].isHittable)}
Code Coverage
XCTest의 기능 중 하나로, 소스 코드의 행이 실행된 횟수를 측정하여 시각화된 형태로 보여준다.