[요약] Engineering for Testability(후반부)[WWDC 2017]
개시하다
본고는 WWDC 2017 세션Engineering for Testability의 후반부 내용을 요약한다.
전반전 먼저 읽었으면 좋겠는데 앞부분은 안 읽어도 뒷부분은 이해할 수 있을 것 같아요.
이번 회의에서는 테스트하기 쉬운 코드의 쓰기, 유지보수와 축소가 쉬운 테스트 코드의 쓰기 등을 소개했다.
테스트 코드의 중요성에 대해서도 말했다.
그림은 애플이 공개한 슬라이드에서 인용되었다.
읽기가 귀찮으신 분들께.
상당히 길기 때문에 모두 읽기 귀찮으신 분들은 기억해 주세요.
Treat your test code with the same amount of care as your app code
주의와 응용 프로그램의 코드 차이가 많지 않은 테스트 코드
Code reviews for test code, not code reviews with test code
테스트 코드와 함께 검사하지 말고 테스트 코드 자체를 검사하세요
즉
아님
.
총결산
Scallable Test Code ~ 쓰기 쉬운 테스트 ~
시험 피라미드
UI Test와 Unit Test의 비율은 다음 피라미드가 되도록 균형을 유지합니다.
보수적이고 축소하기 쉬운 테스트를 쓰는 방법
상당히 길기 때문에 모두 읽기 귀찮으신 분들은 기억해 주세요.
Treat your test code with the same amount of care as your app code
주의와 응용 프로그램의 코드 차이가 많지 않은 테스트 코드
Code reviews for test code, not code reviews with test code
테스트 코드와 함께 검사하지 말고 테스트 코드 자체를 검사하세요
즉
아님
.
총결산
Scallable Test Code ~ 쓰기 쉬운 테스트 ~
시험 피라미드
UI Test와 Unit Test의 비율은 다음 피라미드가 되도록 균형을 유지합니다.
보수적이고 축소하기 쉬운 테스트를 쓰는 방법
추상 조회
다음은 UI Test 제품군입니다.
app.buttons["blue"].tap()
app.buttons["red"].tap()
app.buttons["yellow"].tap()
app.buttons["green"].tap()
app.buttons["purple"].tap()
app.buttons["orange"].tap()
app.buttons["pink"].tap()
변수를 사용하여 쿼리의 일부분을 저장하고 복잡한 쿼리 패키지에 저장합니다.func tapButton(_ color: String) {
app.buttons[color].tap()
}
let colors = ["blue", "red", "yellow", "green", "purple", "orange", "pink"]
for color in colors {
tapButton(color)
}
객체 또는 유틸리티 함수 정의
다음 UI Test는 게임의 설정 화면을 열고 초보자에게 난이도를 설정하며 소리를 끄고 최초 화면으로 돌아가는 동작을 테스트한다.
그러나 이 테스트 코드에 익숙하지 않은 사람들이 보기에 이것은 매우 읽기 어려운 테스트 코드이다.
func testGameWithDifficultyBeginnerAndSoundOff() {
app.navigationBars["Game.GameView"].buttons["Settings"].tap()
app.buttons["Difficulty"].tap()
app.buttons["beginner"].tap()
app.navigationBars.buttons["Back"].tap()
app.buttons["Sound"].tap()
app.buttons["off"].tap()
app.navigationBars.buttons["Back"].tap()
app.navigationBars.buttons["Back"].tap()
// test code
}
따라서 아래와 같이 난이도 설정과 소리 설정에 대해 랩 테스트를 실시한다.enum
관리하는 것이 좋습니다.enum Difficulty {
case beginner
case intermediate
case veteran
}
enum Sound {
case on
case off
}
func setDifficulty(_ difficulty: Difficulty) {
app.buttons["Difficulty"].tap()
app.buttons[difficulty.rawValue].tap()
app.navigationBars.buttons["Back"].tap()
}
func setSound(_ sound: Sound) {
app.buttons["Sound"].tap()
app.buttons[sound.rawValue].tap()
app.navigationBars.buttons["Back"].tap()
}
이렇게 하면 아래처럼 시험을 다시 쓸 수 있다.하지만 이해하기 어려운 부분도 있다.
func testGameWithDifficultyBeginnerAndSoundOff() {
app.navigationBars["Game.GameView"].buttons["Settings"].tap()
setDifficulty(.beginner)
setSound(.off)
app.navigationBars.buttons["Back"].tap()
// test code
}
따라서 정의는 상기enum
등을 가진 다음과 같은 종류를 가진다.class GameApp: XCUIApplication {
enum Difficulty { /* cases */ }
enum Sound { /* cases */ }
func setDifficulty(_ difficulty: Difficulty) { /* code */ }
func setSound(_ sound: Sound) { /* code */ }
func configureSettings(difficulty: Difficulty, sound: Sound) {
app.navigationBars["Game.GameView"].buttons["Settings"].tap()
setDifficulty(difficulty)
setSound(sound)
app.navigationBars.buttons["Back"].tap()
}
}
상기 종류configureSetting(difficulty:sound:)
방법을 사용하면 다음과 같은 매우 알기 쉬운 테스트 코드를 쓸 수 있다.필요하면 Xcode9부터 활용
XCTContext.runActivity(named name: String, block: (XCTActivity))
하여 테스트 보고서를 쉽게 볼 수 있도록참고 자료.func testGameWithDifficultyBeginnerAndSoundOff() {
GameApp().configureSettings(difficulty: .beginner, sound: .off)
// test code
}
키보드 단축키
이것은 MacOS 애플리케이션에서 말했듯이 메뉴 표시줄 기능을 사용할 때 이전에는 이렇게 UI Test를 썼습니다.
let menuBarsQuery = app.menuBars
menuBarsQuery.menuBarItems["Format"].click()
menuBarsQuery.menuItems["Font"].click()
menuBarsQuery.menuItems["Show Colors"].click()
하지만 그 기능이 단축키로 분배되면 다음처럼 그 기능을 호출하는 테스트를 간단하게 쓸 수 있다.app.typeKey("c", modifierFlags:[.command, .shift])
최후
나는 이것이 시험 작성법과 중요성을 이해하는 회의라고 생각한다.
iOS 애플리케이션에서 테스트를 가져오는 계기가 된다면 기쁠 것 같습니다.
마지막으로 보도 내용이 틀리면 마음껏 부드럽게 논평해 주세요.
그럼 끝까지 읽어주세요, 감사합니다!
Reference
이 문제에 관하여([요약] Engineering for Testability(후반부)[WWDC 2017]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/rinchsan/items/1aa70b16b7163f56ab4b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여([요약] Engineering for Testability(후반부)[WWDC 2017]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/rinchsan/items/1aa70b16b7163f56ab4b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)