파이썬에서 단위 테스트 작성 : 어떻게 시작합니까? [닫은]


533

나는 파이썬에서 첫 번째 적절한 프로젝트를 완료했으며 이제 내 임무는 테스트를 작성하는 것입니다.

프로젝트를 처음 수행 한 것은 이번이 처음으로 테스트를 작성하는 것입니다.

문제는 어떻게 시작합니까? 나는 전혀 모른다. 누구나 필기 테스트를 시작하는 데 사용할 수있는 문서 / 튜토리얼 / 링크 / 서적을 지적 할 수 있습니까 (특히 단위 테스트)

이 주제에 대한 조언을 환영합니다.


4
의도 한 경우 테스트를 작성하는 것이 결코 늦지 않았습니다. 불평하는 모든 사람을 위해 아무것도없는 것이
좋습니다

1
여기에 온라인으로 무료로 밖으로의 좋은 테스트 주도 개발 책이다 : chimera.labs.oreilly.com/books/1234000000754/index.html

4
좋은 리소스는 https://www.jeffknupp.com/blog/2013/12/09/improve-your-python-understanding-unit-testing/에서 우연히 발견되었습니다 . 파이썬 초보자에게는 이해할 만했습니다.
페리

2
Hitchhiker 's Guide to Python에는 단위 테스트 도구에 대한 간략한 개요가 있습니다. python-guide-pt-br.readthedocs.io/en/latest/writing/tests
Anton Tarasenko

가이드에 github.com/kennethreitz/samplemod 의 예제 코드 저장소가 있으므로 시작하기에 좋은 위치 이므로 이전 주석의 등급이 높아야합니다 .
setempler

답변:


101

단위 테스트를 처음 사용하는 경우 가장 간단한 학습 방법이 가장 좋습니다. 그에 따라 기본 모듈py.test 대신 사용 하는 것이 좋습니다 .unittest

다음과 같은 두 가지 예를 고려하십시오.

예 1 (단위 테스트) :

import unittest

class LearningCase(unittest.TestCase):
    def test_starting_out(self):
        self.assertEqual(1, 1)

def main():
    unittest.main()

if __name__ == "__main__":
    main()

예 2 (pytest) :

def test_starting_out():
    assert 1 == 1

두 파일의 이름이 모두 같다고 가정하면 test_unittesting.py테스트를 어떻게 실행합니까?

예 1 (단위 테스트) :

cd /path/to/dir/
python test_unittesting.py

예 2 (pytest) :

cd /path/to/dir/
py.test

7
여러 곳에서 py.test의 단순성에 대해 들었습니다 ( docs.python-guide.org/en/latest/writing/tests/#py-test , docs.python.org/3.5/library/unittest.html#module -unittest , jeffknupp.com/blog/2013/12/09/...는 ) 왜 unit-test아직 표준 라이브러리에 포함 된 경우 py.testnose매우 간단한 인터페이스와 동일한 기능을 제공? 그것은 단지 이전 버전과의 호환성을 제공하는 것입니다, 또는 않는 unittest몇 가지 장점이 있음이 py.testnosetest제공 할 수 없습니다?
alpha_989

@ alpha_989 표준 파이썬 라이브러리는 사용 가능한 최상의 도구를 포함하지 않습니다. 이것이 바로 PyPI입니다. 표준 unittest패키지는 여전히 충분합니다. 이다 표준 이 종류 잘 작동하도록 보장의 있다고하는 의미합니다. 마지막으로 코드를 사용하는 사람은 추가 패키지를 설치할 필요가 없습니다.
Jeyekomon

72

무료 Python Book Dive Into Python 에는 유용한 단위 테스트 장이 있습니다.

현대적인 관행을 따르는 경우 프로젝트를 작성하는 동안 테스트를 작성하고 프로젝트가 거의 끝날 때까지 기다리지 않아야합니다.

조금 늦었지만 이제 다음에 알 것입니다. :)


13
나는 아직도 당신이 그것을 위해 먼저 쓰기 단위 테스트를해야한다, 당신은 리팩터링 코드를 원하는 경우 단위 테스트를하지 말 것
휴 버트 Kario

9
네, 처음으로 unittests에 온 많은 사람들이 "좋아요. 현재 프로젝트에 너무 늦었습니다"라는 말을 노인들로부터 들었습니다. . 나무 심기에 관한 중국의 속담과 같습니다. 테스트를 시작하기 가장 좋은시기는 프로젝트가 시작될 때입니다. 테스트를 시작하는 두 번째로 좋은 시간은 지금입니다!
JP

4
파이썬 링크로 뛰어
들다

40

제 생각에는 체크 아웃하기에 좋은 3 가지 훌륭한 파이썬 테스트 프레임 워크가 있습니다.
유닛 테스트 - 모듈은 모든 파이썬 배포판에 기본으로 제공
유닛 테스트에 테스트를 실행할 수 있고, 적은 상용구가 있습니다 -.
pytest- 또한 unittest 테스트를 실행하고, 상용구가 적고,보고 기능이 우수하며, 멋진 추가 기능이 많이 있습니다.

이 모든 것들을 잘 비교하려면 http://pythontesting.net/start-here 에서 각각에 대한 소개를 읽으십시오 .
비품에 대한 기사가 확장되어 있으며 더 많은 기사가 있습니다.


35

unittest에 대한 문서는 시작하기에 좋은 장소입니다.

또한 지금은 조금 늦었지만 앞으로는 프로젝트 자체 또는 프로젝트 전에 단위 테스트 작성을 고려하십시오. 그렇게하면 코드 변경을 통해 기존 코드가 손상되지 않았는지 확인하기 위해이를 사용하여 테스트 할 수 있으며 이론적으로 회귀 테스트로 사용할 수 있습니다. 이것은 테스트 케이스 작성의 전체 이점을 제공합니다. :)


테스트 중심 개발을 원한다면 이는 나쁜 일이 아닙니다. 필자의 경우 기존 코드를보고 테스트를 작성하고 조정하여 코드를 이해하려고 노력하고 있습니다 unittest. 일단 문제가 발생하면 개발에 더 많이 사용하고 각 단위의 테스트 사례 수를 늘릴 것입니다.
icedwater

27

unittest 는 표준 라이브러리와 함께 제공되지만 nosetests를 권장합니다 .

" 코는 테스트를 쉽게하기 위해 단위 테스트를 확장합니다. "

나는 또한 당신에게 pylint를 추천 할 것입니다

" 버그와 품질이 떨어지는 징후를 찾는 Python 소스 코드를 분석합니다. "


8

다른 사람들이 이미 대답했듯이 단위 테스트를 작성하는 데 늦었지만 너무 늦지는 않았습니다. 문제는 코드를 테스트 할 수 있는지 여부 입니다. 실제로 기존 코드를 테스트하는 것은 쉽지 않지만 레거시 코드로 효과적으로 작업하기 ( 핵심 포인트 또는 전구체 PDF 참조) 에 대한 책도 있습니다.

이제 단위 테스트 작성 여부는 당신의 전화입니다. 지루한 작업이 될 수 있음을 알아야합니다. 이를 통해 단위 테스트를 배우거나 수락 (end-to-end) 테스트 작성을 고려하고 코드를 변경하거나 프로젝트에 새 기능을 추가 할 때 단위 테스트 작성을 시작할 수 있습니다.


2
"레거시 코드로 효과적으로 작업"에 +1 테스트가없는 코드에 관한 것입니다.
David

3

nosetests는 파이썬에서 단위 테스트를위한 훌륭한 솔루션입니다. 단위 테스트 기반 테스트 케이스와 문서 테스트를 모두 지원하며 간단한 구성 파일로 시작합니다.


코 테스트 링크가 더 이상 사용되지 않습니다. 새로운 위치는 다음과 같습니다. nose.readthedocs.org/en/latest
odigity

1
GitHub의에 대한 설명서와 nosetest 웹 사이트, 당 nosenose2maintanance 모드에 있습니다. py.test훨씬 더 많은 지원을
받기
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.