https://reactnative.dev/docs/testing-overview#mocking
위 사이트의 내용을 번역하고 정리함.
Unit tests
유닛 테스트는 코드의 개별 적인 기능이나 클래스처럼 가장 작은 부분을 담당한다. 테스트 되어야 하는 객체가 의존성을 가지고 있을 때, 종종 객체를 mock out 해야 할 필요가 있다. 유닛테스트의 좋은 점은 빠르게 작성하고 실행할 수 있다는 점이다. 따라서, 테스트가 통과하는지 안 하는지에 대해서 빠르게 피드백을 받을 수 있다. 심지어 Jest는 지속적으로 수정 중인 코드와 관련된 코드를 지속적으로 테스트 할 수 있는 옵션도 제공해 준다. 이 기능을 Watch Mode라고 한다.
Mocking
가끔 테스트 코드가 외부에 의존성을 가지고 있을 때, mock out을 해야한다고 했다. Mocking이란 코드의 특정 의존성을 내 자신의 코드로 대체하는 것이다.
일반적으로, 테스트 실제 객체를 사용하는 것은 mock을 사용하는 것보다 좋은 성능을 낸다. 그러나, 이것이 불가능한 상황들이 있다. 예를 들어서, JS 유닛 테스트가 JAVA 혹은 Object-C로 쓰여진 네이티브 모듈에 의존할 때는 불가능하다.
내 도시의 최근 날씨를 보여주는 앱을 구현하고 있고 날씨 정보를 제공하는 외부 서비스를 사용하거나 외부 의존성을 사용한다고 가정하자. 외부 서비스에서 비가 온다고 전달한다면, 비가 오는 이미지를 보여주고 싶을 것이다. 테스트 코드에는 이 호출을 사용하고 싶지 않을 것이다. 왜냐하면,
- 테스트를 느리게 만들며, 불안정하게 만든다. (네트워크 요청이 포함이 되어 있기 때문)
- 서비스는 테스트를 할 때마다 다른 데이터를 보내줄 가능성이 있다.
- 테스트를 진행할 때 서버가 종료되거나 다른 이유로 인하여 서비스들이 오프라인이 될 수 있다.
따라서, 수천 줄의 코드와 internet-connected thermometers를 효과적으로 대체하면서.서비스에 대한 mock implementation(모의 구현)을 제공할 수 있다.
Jest는 함수 단계부터 모듈 단계까지의 mocking을 제공하고 있다.
Integration Tests
'Development > React Native' 카테고리의 다른 글
[Bluetooth 1] Bluetooth 간단 개념 및 라이브러리 검토 (0) | 2024.01.21 |
---|---|
[React Navigation] Deep Linking 적용 (0) | 2022.08.15 |
React Native iOS 배포 (0) | 2021.02.22 |
React Native Firebase 설정 및 구글 로그인 연동 (iOS) (0) | 2021.01.28 |
Cocoapods (0) | 2021.01.28 |