본문 바로가기
감정일기(가칭)

🚀 Xcode에서 Core Data CRUD 테스트 실행하기

by 밤새는 탐험가89 2025. 10. 21.
728x90
SMALL

✅ LemonLogTests를 이용한 XCTest 실행 가이드


✅ 1️⃣ 테스트 클래스 구조

LemonLogTests는 Xcode가 자동으로 생성하는 기본 테스트 클래스다.


여기에 우리가 만든 DiaryTestManager를 연결해서
Core Data의 CRUD 테스트를 직접 실행할 수 있다.

import XCTest
@testable import LemonLog

@MainActor
final class LemonLogTests: XCTestCase {
    
    // MARK: ✅ 테스트 매니저
    private let testManager = DiaryTestManager.sharded
    
    // MARK: ✅ 전체 테스트 실행
    func testRunAll() {
        testManager.runAllTests()
    }
}

 

📌 핵심 포인트

@testable import LemonLog → 메인 앱 모듈을 테스트 코드에서 접근 가능하게 함.

DiaryTestManager.sharded → 테스트 전용 싱글톤 매니저를 불러옴.

testRunAll() → 모든 CRUD 테스트를 순서대로 자동 실행.


🧠 2️⃣ 테스트가 동작하는 원리

XCTest는 함수 이름이 test로 시작하는 메서드를 자동으로 인식해 실행한다.
즉, testRunAll()은 Xcode가 “테스트 대상”으로 자동 등록한다.

 

- testRunAll() 내부에서 DiaryTestManager.runAllTests()가 호출되며
Core Data의 저장 → 조회 → 수정 → 삭제 → 정리 순으로 수행된다.

- 실행 중 로그는 Xcode의 Test Console 창에 출력된다.

 

예시 출력 👇

🚀 ==== LemonLog Core Data 테스트 시작 ====
✅ [SAVE TEST] happy 감정일기 저장 성공
✅ [FETCH TEST] 총 3개의 감정일기 조회됨
✅ [UPDATE TEST] 수정 성공
🗑️ [DELETE TEST] 삭제 성공
✅ ==== 모든 테스트 완료 ====

🧩 3️⃣ 테스트 실행 방법

📍 방법 ①: Xcode 메뉴 이용

상단 메뉴에서 Product → Test 선택
(⌘ + U 단축키도 가능)

Xcode가 자동으로 LemonLogTests 클래스를 실행

결과는 아래의 Test Navigator콘솔 로그에서 확인 가능

 

📍 방법 ②: 개별 테스트 함수만 실행

testRunAll() 왼쪽에 있는 ▶︎ 버튼 클릭

해당 테스트 메서드만 단독 실행됨

결과 로그는 Xcode 하단 콘솔에 표시

💡 이 방식은 전체 테스트 중 특정 부분만 빠르게 확인할 때 유용하다.

 

📍 방법 ③: 단축키로 전체 테스트 실행

⌘ + U → 모든 테스트 클래스 및 함수 실행

⌃ + ⌘ + U → 마지막으로 실행한 테스트 다시 실행 (re-run)


⚙️ 4️⃣ 테스트 환경 주의사항

✅ (1) “DSTROOT install style is not supported on this device” 에러

테스트를 물리 디바이스(iPhone 실기기) 에서 실행하면 발생할 수 있는 오류다.
이는 XCTest가 “기기 빌드 대상”으로 설정될 때 생기는 문제로,
시뮬레이터에서 실행하면 해결된다.

 

💡 해결법:
Product → Destination → “iOS Simulator” 선택
이후 ⌘ + U 로 다시 테스트 실행

 

✅ (2) 더미 데이터는 실제 저장소에 생성됨

테스트는 실제 Core Data Persistent Store(SQLite)에 반영되지만,
마지막에 clearAllData()가 실행되어 모든 더미 데이터가 삭제된다.
따라서 테스트 후 실제 데이터 오염은 발생하지 않는다.

 

✔️ 테스트 순서
저장 → 조회 → 수정 → 삭제 → 전체 데이터 파괴(destroy)


🧾 5️⃣ 전체 테스트 흐름 요약

단계 테스트 함수 설명
1 testSaveDiary() 더미 일기 저장
2 testFetchAllDiaries() 전체 일기 조회
3 testUpdateDiary() 일기 내용 수정
4 testDeleteDiary() 일기 삭제
5 clearAllData() 실제 SQLite 스토어 완전 삭제
6 runAllTests() 위의 모든 과정 자동 실행

✅ 결론

이번 구조는 단순한 단위 테스트가 아니라,
Core Data의 실제 저장소(SQLite) 기반 CRUD를 통합적으로

검증하는 통합 테스트(Integration Test) 이다.

 

DiaryTestManager는 CRUD 로직의 실제 동작을 테스트

LemonLogTests는 XCTest 실행 진입점

테스트 실행은 시뮬레이터에서만 가능하며

테스트 완료 시 데이터는 완전히 초기화되어 안전하다

728x90
LIST