💡 테스트 코드는 개발한 코드의 동작이 의도한 대로 수행되는지 검증한다
테스트 코드 작성 시 오류를 빠르게 발견해 유지보수가 쉬워지며 코드의 품질을 높혀 소프트웨어의 안정성을 높일 수 있다
크게 단위 테스트(Unit Test)와 통합 테스트(Integration Test), UI 테스트로 나뉜다
1. 테스트 코드의 분류
1-1. 단위 테스트(Unit Test)
소프트웨어의 가장 작은 단위를 테스트한다 (일반적으로 함수나 메서드 단위)
단위 테스트의 주요 목적은 코드의 각 부분이 정확하게 작동하는지 확인하는 것이며, 주로 의존성 없는 코드(로직이나 계산)에 대해 독립적으로 검증하는데 사용된다
1-2. 통합 테스트(Integration Test)
여러 컴포넌트나 시스템이 함께 작동할 때 발생할 수 있는 문제를 찾는다
주로 시스템의 인터페이스, 데이터의 흐름, 전체적인 동작을 검증하는데 중점을 둔다
1-3. UI 테스트
사용자 인터페이스를 테스트해서 앱이 사용자 입력에 대해 올바르게 반응하는지 확인한다
2. 테스트 코드 작성 예시
Swift에서는 XCTest라는 프레임워크를 사용해 테스트 코드를 작성한다
XCTest란 각 테스트 케이스를 정의하고 실행하며, 테스트의 성공과 실패를 자동으로 검증해 준다
2-1. Xcode에서 XCTest 사용하기
최초 프로젝트 생성 시에는 Include Tests 체크☑️
추후 프로젝트에 추가 시에는 네비게이션 바 - 6번째 탭 - 좌측 하단의 "+" - New Unit Test Target
하면 아래처럼 테스트 파일들과 클래스가 생긴 것을 확인할 수 있다
새로 생긴 테스트파일에 @testable import (프로젝트명) 해준다
*프로젝트 전체에 접근 권한이 생긴다
import 안될 땐 Enable Testing Search Paths를 No에서 Yes로 변경해준다
2-2. 테스트 코드 작성
[ 템플릿 구조에 대한 설명 ]
- setUpWithError(),tearDownWithError() : 각 테스트가 실행되기 전과 후에 호출된다. 테스트 환경을 초기화하거나 해제하는 코드가 들어갈 수 있다
- testExample() : 기본 테스트 함수 예제
- testPerformanceExample() : 성능 테스트 예제 함수
먼저 검사할 예시 코드를 뷰컨트롤러에 만들어 주고
테스트 파일로 이동하여 목적에 맞게 테스트 코드를 작성해 준다
테스트 시작: Product - Test or 단축키(cmd+U)
Testing Build 진행 후 시뮬레이터가 켜졌다가 테스트 완료 알림이 뜬다
상단에 Test Completed 확인
테스트 성공 시 초록색 다이아몬드, 실패 시 빨간색 X와 실패 원인이 출력된다
테스트 성공 예시
테스트 실패 예시
를 보고싶어서 일부러 add() 함수를 틀리게 수정해보았다(테스트 코드는 수정할 필요 없음!!)
faild 와 함께 실행된 결과 (-2) 와 오류 시 출력되도록 설정해둔 문구가 뜬다 "3 + 5는 8이어야 합니다."
해당 문구 확인 후 add() 함수를 수정해 주면 된다
3. XCTest에서 제공하는 주요 Assertion 함수
1) XCTAssertEqual : result 값과 넣어준 결과 값이 같은지 확인
func testAddition() {
let result = 2 + 3
XCTAssertEqual(result, 5, "2 + 3은 5이어야 합니다.")
}
2) XCTAssertNotEqual : result 값과 넣어준 결과 값이 같지 않은지 확인(값이 같으면 테스트 실패)
func testSubtraction() {
let result = 10 - 5
XCTAssertNotEqual(result, 3, "10 - 5는 3이 아니어야 합니다.")
}
3) XCTAssertTrue : 조건이 true 인지 확인(조건이 false이면 테스트 실패)
func testIsPositiveNumber() {
let number = 10
XCTAssertTrue(number > 0, "number는 양수이어야 합니다.")
}
4) XCTAssertFalse : 조건이 false 인지 확인(조건이 true이면 테스트 실패)
func testIsNegativeNumber() {
let number = -5
XCTAssertFalse(number > 0, "number는 음수이어야 합니다.")
}
5) XCTAssertNil : 값이 nil 인지 확인(값이 있으면 실패)
func testValueIsNil() {
let optionalValue: String? = nil
XCTAssertNil(optionalValue, "optionalValue는 nil이어야 합니다.")
}
6) XCTAssertNotNil : 값이 nil 이 아닌지 확인(값이 nil이면 실패)
func testValueIsNil() {
let optionalValue: String? = nil
XCTAssertNil(optionalValue, "optionalValue는 nil이어야 합니다.")
}
7) XCTFail : 조건 없이 테스트를 강제로 실패하게 함
func testUnimplementedFeature() {
XCTFail("이 기능은 아직 구현되지 않았습니다.")
}
8) XCTAssertGreaterThan : 첫 번째 값이 두 번째 값보다 큰지 확인(첫 번째 값이 더 작거나 같으면 실패)
9) XCTAssertLessThan : 첫 번째 값이 두 번째 값보다 작은지 확인(첫 번째 값이 더 크거나 같으면 실패)
🔗 참고자료
https://f-lab.kr/insight/test-code-writing-guide
테스트 코드 작성 가이드: 단위 테스트부터 통합 테스트까지
테스트 코드의 중요성과 단위 테스트, 통합 테스트의 차이점을 이해하고, 실제 테스트 코드 작성 방법에 대해 알아보는 가이드입니다.
f-lab.kr
'💡 Today I Learned > 스터디 자료정리' 카테고리의 다른 글
[스터디8일차] Diffable Data Source (0) | 2024.11.13 |
---|---|
[스터디7일차] 객체지향 & 프로토콜 (0) | 2024.11.12 |
[스터디5일차] MVVM 패턴 (0) | 2024.10.25 |
[스터디4일차][RxSwift] RxCocoa (1) | 2024.10.22 |
[스터디2일차][RxSwift] 연산자 (1) | 2024.10.11 |