본문 바로가기

iOS/Module

Tuist - tuist test

https://docs.tuist.io/en/guides/develop/test

What is Tuist? | Tuist

docs.tuist.io

 

Overview

Tuist는 tuist test라는 명령어를 제공한다.
 
문서에서 기존 Xcode에서 테스트를 실행하는 것보다 tuist test가 매력적인 이유를 아래로 소개한다.
 

단일 명령 (Single Command)

  • tuist test 단일 명령으로 프로젝트가 필요할 경우 생성된 후 컴파일되도록 보장한다.
  • tuist generate와 같은 빌드 명령을 따로 실행할 필요 없이 정말 단일 명령으로 모든 테스트가 가능하다.

보기 좋은 출력 (Beautified Output)

  • Tuist는 xcbeautify와 같은 도구를 사용하여 복잡하고 보기 힘든 출력을 더 읽기 쉽게 바꿔준다.
  • 이는 빌드와 테스트 과정에서 발생하는 오류나 경고를 쉽게 파악할 수 있도록 돕는다.

똑똑한 테스트 (Smart Runner)

  • 변경되 코드에만 필요한 테스트를 실행한다.
  • 전체 테스트를 실행할 필요 없이 효율적으로 테스트를 수행할 수 있다.
  • 특히 CI 환경에서 일반적으로 변경 사항과 상관없이 전체 테스트를 실행하기 때문에 비효율적이다. Tuist는 원격 캐시와 스마트 러너를 통해 이 문제를 해결한다.
  • tuist test를 수행하면 프로젝트를 해싱하여 이전에 저장된 해시와 비교하여 어떤 파일이나 모듈이 변경되었는지 판단한다.
  • 의존성 그래프에서, 변경된 모듈과 관련된 테스트만 선택하여 실행한다.

빌드 캐시 최적화 (Cache)

  • Tuist는 빌드 결과를 원격 캐시에 저장하고, 이를 재사용함으로써 빌드 속도를 크게 향상 시킬 수 있다.
  • 대규모 프로젝트일 수록 큰 성능 이점을 제공한다.

불안정한 테스트 관리 (Flakiness)

  • 플래키 테스트(flaky test)는 테스트가 불안정하게 동작해 개발자들이 테스트 결과를 신뢰하기 어렵게 만드는 문제이다.
  • 이러한 문제는 자동화된 테스트 환경에서 특히 심각할 수 있다.
  • 작은 코드 변경에도 불구하고 CI 빌드에서 반복적으로 실패하는 테스트 때문에 시간이 낭비되고, 작업의 효율이 떨어질 수 있다.
  • 테스트의 불안정성을 줄이고, 문제가 있는 테스트를 쉽게 감지하고 수정할 수 있도록 지원한다. (프로젝트 대시보드로 제공)

 

Practice ( CLI )

샘플 프로젝트 git를 만들고 확인해 보자.
 
샘플 프로젝트는 tuist 4.32.0 기반으로 작성되었고 아래와 같은 간단한 의존성 그래프를 갖고 시작한다.
 

 
 
 
[최초 tuist test 명령]

  • tuist test를 최초 수행하면, 프로젝트를 생성한 후 전체 테스트들을 모두 수행하는 것을 확인할 수 있다.
  • CommonTests, FeatureATests, FeatureBTests, , MyAppTests, MyAppUITests를 수행하고 해시 값을 저장한다.

 
 
[수정 없이 tuist test 명령]

  • Unit Test를 모두 스킵한다.
  • MyAppUITests만 수행한다.
  • 참고로 UITest에는 현재 Selective Testing 기능을 제공하지 않고 있다. issue

 
[App 모듈 수정 후 tuist test 명령]

  • MyAppTests, MyAppUITests를 수행한다.

 
[FeatureA 모듈 수정 후 tuist test 명령]

  • FeatureATests, MyAppTests, MyAppUITests를 수행한다.

 
[Common 모듈 수정 후 tuist test 명령]

  • CommonTests, FeatureATestsMyAppTestsMyAppUITests를 수행한다.

 

Practice ( Github Actions )

간단하게 Github Action을 붙여볼 수 있을 거라 생각했는데 public archive 되어 패스