L-j-h-c / TIL

CS, Swift, Java, C++, 개발 관련 공부한 내용 정리
11 stars 0 forks source link

[Testing] Unit Test #59

Open L-j-h-c opened 2 years ago

L-j-h-c commented 2 years ago

Unit Test란?

개발 과정에서 Test는 중요하다. 단위 테스트는 프로그래밍에서 소스코드의 특정 모듈이 개발자가 의도한대로 잘 작동하는지 테스트하는 것을 말한다. 이 의도에는 UI, Layout, API, UserDefaults의 값 저장 등이 있다.

특정 함수나 메서드의 동작에 대한 테스트를 Unit Test라고 하고, UI 표시 및 Action에 대한 Test를 UI Test라고 한다. Unit Test는 Scene 대상으로 실시하고, UI Test는 앱 자체를 대상으로 테스트한다. 현업에서는 UI Test가 화면 접근에 대한 Cost도 들고, 네트워크 연결 상태에 따라 성공과 실패가 달라질 수 있기에 Unit Test를 많이 사용한다고 한다. 앱 하나를 전체로 테스트하는 것이 아니라, 함수, 모듈, 클래스 단위로 테스트하기에 단위 테스트라고 한다.

원하는 값이 나오는지 검증 / 연속되어야 하는 동작이 진행되는지 확인

작성할 당시에 발생할 수 있는 모든 상황을 가정할 수 없다. 예상했던 값이 들어오면 잘 작동하겠지만, 그렇지 않은 경우 에러가 발생할 수 있다. 인트 타입 인자를 받는 경우, 범위를 넘어서 들어오거나 다른 타입이 들어오면 어떻게 될까?

XCode에는 XCTest라는 FrameWork가 있다. 프로젝트에 대한 단위 테스트 성능 테스트 유아이 테스트를 만들고 실행할 수 있게 하는 프레임워크이다. 테스트 케이스와 테스트 메서드를 추가해서 사용하면 된다. 프로젝트 내에서 모델이나 모델 내의 메서드를 테스트하는데, XCTestCase는 성능 테스트, 테스트 방법을 정의하기 위한 기본 클래스이다. setUp은 목업 데이트와 같은 임시 데이터를 부여해서 모델 내의 함수들이 잘 작동하는지 테스트할 수 있다. tearDown은 만든 테스트케이스 종료 후에 정리를 할 수 있게 하는 기능을 제공한다.

RxTest

RxSwift의 Observable은 특정 값이 아니라 어떠한 이벤트의 배열인 시퀀스이다. 이러한 Observable에 가상의 시간 개념을 주입해서 RxSwift를 검증한다. 특정 시점에 해당 이벤트가 발생하는지에 대해 검증할 수 있다. TestScheduler로 시간 흐름을 만들고, hot 또는 Cold 옵저버블을 정해서 생성할 수 있다.

RxBlocking

Observable의 이벤트 방출을 검증한다. 특정 시간동안 방출된 Observable의 이벤트를 검증한다.

원하는 원하는 값이 나오는 것을 보고 싶으면 RxTest, 시점 상관없이 이벤트를 보고 싶으면 RxBlocking을 활용하면 된다.

iOS에서 Test

Xcode Project를 생성할 때 include test를 해서 생성하면 된다.