세로형
Recent Posts
Recent Comments
Link
11-08 00:00
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

꿈 많은 사람의 이야기

Python unittest를 사용해 TDD 맛보기 본문

python

Python unittest를 사용해 TDD 맛보기

이수진의 블로그 2020. 2. 12. 09:24
반응형
728x170

포스팅 개요

이번 포스팅은 Python에서 Test Case를 작성하고 나아가 TDD(Test Driven Development)에 활용할 수 있는 unittest를 학습해봅니다.

본 글은 아래 참조 리스트를 참고하였습니다.


포스팅 본문

요즘, 개발 관련 스터디나 모임을 가게 되면 많이 듣는 단어가 TDD입니다. TDD란 무엇일까요?

TDD란?

TDD는 Test Driven Development의 약자로 테스트 주도 개발이라는 뜻을 가지고 있습니다.

TDD는 소프트웨어를 개발하는 방법론 중 하나입니다.

개발자들이 작성하는 코드가, 혹은 우리가 코드를 리팩토링(refactoring)을 하게 될 때 제대로 동작하는지 안정성을 체크할 때 등의 검증 단계가 필요한데 이러한 과정을 테스트 과정이라고 부릅니다.

이때 TDD는 개발자가 자신의 코드를 테스트 하는 것으로 테스트를 위한 코드를 작성하는 것이 TDD(Test Driven Development)입니다.

 

Python에서 TDD 및 Test case 예제

이번 포스팅은 개요에서 말씀드렸듯이 파이썬(Python)에서 Test Case를 작성할 수 있는 unittest를 학습합니다.

그리고, 이를 잘 활용하면 Python에서 TDD를 활용할 수 있습니다. (저는 아직.. 한참 멀어서 여기까진 ㅠ)

기본적인 예제를 보시면서 학습하시죠!

 

1. 먼저, 아주 단순한 파이썬(Python) 계산기를 만들어볼까요?

계산기의 기능은 아래와 같습니다. (이제보니 빼기만 sub가 아닌 풀 텍스트네요 ㅎㅎ..)

  • 더하기
  • 빼기
  • 곱하기
  • 나누기

 

2. 이제 Python의 unittest를 사용해서 test case를 작성해봅니다. (일종의 TDD 맛보기입니다 ㅎㅎ)

먼저, 파일 이름을 "test_어쩌구" 혹은 "어쩌구_test.py"과 같은 형식으로 만들어줍니다. 

이렇게 파일 이름을 만들어주면 Python자체에서 "이것은 테스트를 위한 파일" 이라고 해석합니다

 

또한, unittest를 사용해서 TDD 혹은 test case를 진행하고 싶으면 unittest의 TestCase를 상속 받아야합니다.

저는 계산기에 아래와 같은 가설로 Test case를 작성하려고 합니다.

  • 더하기 할 때 들어오는 값이 숫자인가?
  • 빼기를 할 때 뒤에 숫자가 더 큰가?
  • 곱하기 값들이 숫자인가?
  • 나눌 때 나누는 값이 0보다 큰가?

그리고, 함수는 4개이므로 4개에 대해 테스트를 진행합니다. (함수 단위로 테스트를 진행해서 그렇습니다.)

가설에 대한 Test case 코드는 위와 같습니다. Python unittest에서는 다양한 test case 검사를 지원해줍니다.

제가 위에서 작성한 assertIsInstance, assertTrue 외에도 정말 많은 것들이 있습니다. 아래를 참조해주세요

출처 : Python docs

위와 같은 자료를 활용해서 여러 가지 기능별 테스트를 할 수 있습니다. 더 많은 자료는 공식 문서를 보시길 바랍니다.

 

3. 그럼 이제 test case를 작성했으니, unittest를 실행해볼까요?

실행 방법은 python -m unittest 명령어를 입력하면 됩니다.

 

위 화면은 오류가 나는 화면인데요.

만약, 오류가 나게 되면 Error가 나오면서 Error의 약자인 E가 나오게 됩니다.

또한, 제가 작성한 코드에서 함수는 4개이므로 단위 테스트가 4번 진행되고 그래서 E가 4번 나타나는 것을 볼 수 있습니다.

그럼 오류가 안나게 수정할까요?

 

 

수정하고 다시 실행합니다.

 

자! 그러면 이번에는 단순히 점(.)만 나왔습니다. 점(.)이 4개 나온 이유는 제 코드의 함수가 4개이니까 그렇습니다.

.이라는 것은 무사히 잘 통과가 되었다는 뜻입니다.

즉, E는 Error, F는 Fail, .은 통과 인 것이죠!

저렇게 보면 보기가 참 어렵습니다. 그럴 땐 -v 옵션을 추가해줍니다.

 

python -m unittest -v 를 하게 되면 어떤 함수에서 통과가 되었는지, 실패를 했는지 등을 좀 더 명확하게 보여주게 됩니다.

 

반응형
그리드형
Comments