Development/React Native

[Docs] Testing

Ahn Paul 2022. 8. 15. 13:25

https://reactnative.dev/docs/testing-overview#mocking

 

Testing · React Native

This guide introduces React Native developers to the key concepts behind testing, how to write good tests, and what kinds of tests you can incorporate into your workflow.

reactnative.dev

위 사이트의 내용을 번역하고 정리함.

 

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