파 이 썬 코드 를 어떻게 테스트 하 는 지 간단히 말 하 다
테스트 를 작성 하여 프로그램의 모든 다른 기능 을 검사 합 니 다.모든 테스트 는 하나의 관심 사 에 집중 되 어 결과 가 기대 하 는 것 인지 아 닌 지 를 검증 한다.정기 적 으로 테스트 를 실시 하여 응용 프로그램 이 예상 한 대로 작업 하도록 확보 하 다.테스트 커버 가 많 을 때 테스트 를 실행 하면 수정 점 과 새로 추 가 된 점 이 응용 프로그램 에 영향 을 주지 않 을 것 이 라 고 자신 할 수 있 습 니 다.
지식 점
가능 하 다 면 코드 라 이브 러 리 의 모든 코드 를 테스트 해 야 합 니 다.그러나 이것 은 개발 자 에 게 달 려 있 습 니 다.건장 한 테스트 를 쓰 는 것 이 현실 에 맞지 않 으 면 뛰 어 넘 을 수 있 습 니 다.마치Nick Coghlan_(Python 핵심 개발 자)는 인터뷰 에서 튼튼한 테스트 세트 가 있 습 니 다.큰 변경 을 할 수 있 고 외부 에서 볼 수 있 는 행위 가 변 하지 않 는 다 고 확신 할 수 있 습 니 다.
3.단원 테스트
위 키 백과 의 소 개 를 참조 합 니 다.
컴퓨터 프로 그래 밍 에서 유닛 테스트(영어:Unit Testing)는 모듈 테스트 라 고도 부 르 며 프로그램 모듈(소프트웨어 디자인 의 최소 단위)을 대상 으로 정확성 검 사 를 하 는 테스트 작업 이다.프로그램 단원 은 응용 가능 한 최소 테스트 부품 입 니 다.프로 세 스 프로 그래 밍 에서 하나의 단원 은 하나의 프로그램,함수,과정 등 이다.대상 을 대상 으로 프로 그래 밍 할 때 가장 작은 단원 은 바로 방법 이다.기본 클래스(초 클래스),추상 류,또는 파생 클래스(하위 클래스)중의 방법 을 포함한다.
유닛 테스트 모듈
Python 에서 유닛 테스트 를 도와 줄 유닛 테스트 모듈 이 있 습 니 다.
곱 하기 계산 프로그램
이 예 에서 우 리 는 단 계 를 계산 하 는 프로그램
factorial.py
을 쓸 것 이다.
import sys
def fact(n):
"""
:arg n:
:returns: n
"""
if n == 0:
return 1
return n * fact(n -1)
def div(n):
"""
"""
res = 10 / n
return res
def main(n):
res = fact(n)
print(res)
if __name__ == '__main__':
if len(sys.argv) > 1:
main(int(sys.argv[1]))
실행 프로그램:
$ python3 factorial.py 5
4.첫 번 째 테스트 사례어떤 함 수 를 테스트 합 니까?
보시 다시 피
fact(n)
이 함 수 는 모든 계산 을 실행 하기 때문에 우 리 는 적어도 이 함 수 를 테스트 해 야 합 니 다.파일 편집
factorial_test.py
코드 는 다음 과 같 습 니 다.
import unittest
from factorial import fact
class TestFactorial(unittest.TestCase):
"""
"""
def test_fact(self):
"""
`test_`
"""
res = fact(5)
self.assertEqual(res, 120)
if __name__ == '__main__':
unittest.main()
실행 테스트:
$ python3 factorial_test.py
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
설명 하 다.우 리 는 먼저 유닛 테스트 모듈 을 가 져 온 후에 우리 가 테스트 해 야 할 함 수 를 테스트 했다.
테스트 용례 는 하위 클래스 화
unittest.TestCase
를 통 해 만 들 어 졌 다.지금 우 리 는 테스트 파일 을 열 고 120 을 121 로 변경 한 후에 무슨 일이 일어 날 지 봅 시다.
각종 assert 문장
Method
Checks that
New in
assertEqual(a, b)
a == b
assertNotEqual(a, b)a != b
assertTrue(x)bool(x) is True
assertFalse(x)bool(x) is False
assertIs(a, b)a is b
2.7assertIsNot(a, b)
a is not b
2.7assertIsNone(x)
x is None
2.7assertIsNotNone(x)
x is not None
2.7assertIn(a, b)
a in b
2.7assertNotIn(a, b)
a not in b
2.7assertIsInstance(a, b)
isinstance(a, b)
2.7assertNotIsInstance(a, b)
not isinstance(a, b)
2.7이상 테스트
만약 우리 가
factorial.py
에서 호출div(0)
한다 면,우 리 는 이상 이 던 져 지 는 것 을 볼 수 있 을 것 이다.우리 도 이런 이상 을 테스트 할 수 있다.이렇게:
self.assertRaises(ZeroDivisionError, div, 0)
전체 코드:
import unittest
from factorial import fact, div
class TestFactorial(unittest.TestCase):
"""
"""
def test_fact(self):
"""
`test_`
"""
res = fact(5)
self.assertEqual(res, 120)
def test_error(self):
"""
"""
self.assertRaises(ZeroDivisionError, div, 0)
if __name__ == '__main__':
unittest.main()
6.mountab.pymountab.py 에는 하나의
mount_details()
함수 만 있 고 함수 분석 및 마 운 트 상세 정 보 를 인쇄 합 니 다.
import os
def mount_details():
"""
"""
if os.path.exists('/proc/mounts'):
fd = open('/proc/mounts')
for line in fd:
line = line.strip()
words = line.split()
print('{} on {} type {}'.format(words[0],words[1],words[2]), end=' ')
if len(words) > 5:
print('({})'.format(' '.join(words[3:-2])))
else:
print()
fd.close()
if __name__ == '__main__':
mount_details()
mountab.py 재 구성현재 우 리 는 mountab 2.py 에서 위의 코드 를 재 구성 하고 우리 가 쉽게 테스트 할 수 있 는 새로운 함수
parse_mounts()
가 있 습 니 다.
import os
def parse_mounts():
"""
/proc/mounts
"""
result = []
if os.path.exists('/proc/mounts'):
fd = open('/proc/mounts')
for line in fd:
line = line.strip()
words = line.split()
if len(words) > 5:
res = (words[0],words[1],words[2],'({})'.format(' '.join(words[3:-2])))
else:
res = (words[0],words[1],words[2])
result.append(res)
fd.close()
return result
def mount_details():
"""
"""
result = parse_mounts()
for line in result:
if len(line) == 4:
print('{} on {} type {} {}'.format(*line))
else:
print('{} on {} type {}'.format(*line))
if __name__ == '__main__':
mount_details()
같은 테스트 코드 로 mounttest.py 파일 을 작성 합 니 다:
#!/usr/bin/env python
import unittest
from mounttab2 import parse_mounts
class TestMount(unittest.TestCase):
"""
"""
def test_parsemount(self):
"""
`test_`
"""
result = parse_mounts()
self.assertIsInstance(result, list)
self.assertIsInstance(result[0], tuple)
def test_rootext4(self):
"""
"""
result = parse_mounts()
for line in result:
if line[1] == '/' and line[2] != 'rootfs':
self.assertEqual(line[2], 'ext4')
if __name__ == '__main__':
unittest.main()
실행 프로그램$ python3 mounttest.py
..
----------------------------------------------------------------------
Ran 2 tests in 0.001s
OK
7.테스트 보급률
테스트 보급률 은 코드 라 이브 러 리 가 테스트 되 지 않 은 부분 을 찾 는 간단 한 방법 이다.그것 은 결코 너 에 게 테스트 가 좋 은 지 아 닌 지 를 알려 주지 않 을 것 이다.
Python 에서 우 리 는 우 리 를 돕 기 위해 좋 은 보급률 도 구 를 가지 고 있다.너 는 실험 건물 환경 에서 그것 을 설치 할 수 있다.
$ sudo pip3 install coverage
덮어 쓰기 예시$ coverage3 run mounttest.py
..
----------------------------------------------------------------------
Ran 2 tests in 0.013s
OK
$ coverage3 report -m
Name Stmts Miss Cover Missing
--------------------------------------------
mounttab2.py 22 7 68% 16, 25-30, 34
mounttest.py 14 0 100%
--------------------------------------------
TOTAL 36 7 81%
다음 명령 을 사용 하여 덮어 쓰기 결 과 를 HTML 파일 로 출력 한 다음 브 라 우 저 에서 볼 수 있 습 니 다.
$ coverage3 html
8.총화
지식 포인트 회고:
실제 생산 환경 에서 테스트 절 차 는 매우 중요 한 일환 으로 테스트 엔지니어 에 게 뜻 을 두 지 않 더 라 도 앞으로 의 추 세 는 DevOps 이기 때문에 좋 은 테스트 기능 을 습득 하 는 것 도 유용 하 다.
파 이 썬 코드 를 어떻게 테스트 하 는 지 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 테스트 파 이 썬 코드 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
작은 재료 : 결함 혼입, 테스트 레벨, 공정 책임결함은 후공정에서 적출할수록 비용이 부풀기 때문에 조기에 적출하는 것이 이상적입니다. 그럼에도 불구하고 결함의 종류에 따라 조기에 발견되는 것이나 후공정에서 처음으로 나타나게 되는 것이 있습니다. 예를 들어 컴파일러...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.