저는 JavaScript 배경을 가진 개발자로서 Jest로 테스트를 작성하는 데 상당한 시간을 보냈습니다. 내 프로젝트인 gimme_readme에서는 내가 사용하고 있던 타사 npm 모듈 때문에 Node 및 Jest를 사용하여 몇 가지 실험적인 기능을 시험해 봐야 했습니다. ES6 구문을 사용할 때 Jest 테스트를 실행하는 방법을 알려주는 훌륭한 Stack Overflow 스레드를 찾을 수 있었습니다. 이 똑똑한 사람들의 지혜가 없었다면 제가 어려움을 겪었을 것입니다! 그러나 Jest의 실험적 기능을 사용하는 방법에 대한 지식을 바탕으로 다음을 수행할 수 있었습니다.
위에 설명된 CI 파이프라인의 코드는 여기에서 찾을 수 있으며, 모든 브랜치에 푸시가 이루어지거나 풀 요청이 있을 때마다 실행되도록 설정되어 있습니다. 이렇게 하면 내 저장소에 기여하려는 사람은 누구나 자신이 기여한 코드가 내 메인 브랜치에 병합할 만큼 "적절한지" 알 수 있습니다. 적어도 자동화된 테스트에 관한 한은 말이죠.
누구든지, 제가 예전에 나의 저장소에서 했던 작업에 대해서는 이쯤 할게요.
이번 주에 저는 제 친구 Aryan Khurana가 작성한 Python 프로젝트에 대한 몇 가지 테스트를 작성하는 데 도전하기로 결정했습니다. Aryan의 프로젝트는 GitHub 저장소에 대한 통찰력을 제공하는 github-echo라는 명령줄 도구입니다. 익숙하지 않은 언어를 사용하는 테스트 프레임워크(PyTest)는 확실히 제가 익숙하지 않은 영역이었지만 Aryan이 기꺼이 나에게 방법을 알려준 것에 정말 감사했습니다(Aryan에게 감사드립니다!).
Aryan 저장소에 대한 테스트 작업을 시작했을 때 테스트 결과가 얼마나 다른지 즉시 압도되었습니다. Jest가 나에게 친숙한 영역이 된 반면, Python의 pytest는 매우 낯설게 느껴졌습니다. 그럼에도 불구하고 Aryan의 지도와 약간의 결단으로 나는 그 독특한 특징을 이해하기 시작했습니다.
테스트 사례에서 제가 발견한 내용을 분석해 보겠습니다.
매개변수화된 테스트: 내 눈길을 가장 먼저 사로잡은 것 중 하나는 @pytest.mark.parametrize 데코레이터였습니다. 이는 Jest의 test.each와 유사하지만 구문이 더 깔끔합니다.
@pytest.mark.parametrize( 'invalid_url', [ 'https://gitlab.com/username/repository', 'https://github.com/username', # ... more test cases ], )
컨텍스트 관리자: Jest의 Expect().toThrow() 대신 Python은 pytest.raises와 함께 컨텍스트 관리자를 사용합니다.
@pytest.mark.parametrize( 'invalid_url', [ 'https://gitlab.com/username/repository', 'https://github.com/username', # ... more test cases ], )
임시 파일 시스템: 테스트에서는 파일 시스템 작업을 위해 pytest의 tmp_path 고정 장치를 사용합니다. 이는 Jest에서 모의 파일 시스템을 설정하는 것보다 훨씬 깔끔합니다.
with pytest.raises(typer.BadParameter, match='Invalid GitHub repository URL'): check_cli_arguments(invalid_url, 'gemini', 0.5, Path('output.md'))
JavaScript와 Python 테스트 프레임워크를 모두 사용한 경험을 통해 소프트웨어 테스트에 대한 관점이 넓어졌습니다. Jest가 고향처럼 느껴졌지만 매개변수화된 테스트 및 고정 장치와 같은 pytest의 강력한 기능을 높이 평가하게 되었습니다. JavaScript 테스트를 작성하든 Python 테스트를 작성하든 최종 목표는 동일합니다. 즉, 사용자에게 안정적이고 잘 테스트된 코드를 제공하는 것입니다.
위 내용은 # Jest에서 Pytest까지: JavaScript 개발자의 Python 테스트 여정의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!