클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

나의 첫 테스트 코드 3 - 파이썬의 unittest 본문

웹 · 앱 개발/디버깅

나의 첫 테스트 코드 3 - 파이썬의 unittest

huenuri 2024. 7. 30. 11:11

이제 3주차의 마지막 단원 학습만이 남아있다. 휴~ 빨리 마치고 싶다! 운동을 하려고 했지만 이 수업까지 마저 학습하고 할 생각이다. 저녁도 아직 먹지 않았으나 배는 하나도 고프지 않다.
가족들과 오랜만에 만나 오리고기로 포식을 했으니 저녁은 간단히 먹어도 될 것 같다. 진짜 오랜만에 동생도 만나서 프로그래밍 이야기도 하고 서로 대화가 통해서 즐거운 시간이었다. 그리고 컴퓨터도 손봐줘서 정말 좋았다.

이번에는 파이썬의 유닛테스트에 대해서 학습해볼 것이다. 이것은 파이썬에서 좀더 손쉽게 사용할 수 있는 모듈 유닛테스트이다. 이 모듈은 어떻게 사용하는지, 어떤 점이 좋은지 살펴보게 될 것이다.


 

이론 4 - 파이썬의 unittest

 

 

유닛테스트는 파이썬에 기본적으로 내장되어 있는 모듈이다. 유닛테스트는 파이썬만 있다면 언제 어디서나 사용할 수 있다. unittest를 import하고 클래스를 하나 만들어준다. IsPalindronmeTests라는 함수를 유닛테스트 TestCase에 집어 넣는다.
이 괄호 안에 넣어주면 unittest를 상속 받는다는 의미이다. 그런 다음 함수를 작성해준다. 각각의 함수는 각각의 테스트 코드를 말한다.

지금까지 보았던 테스트 코드와 약간 다른 점이 있다. 먼저 self라는 인자를 모든 함수가 받아야 한다. 이 self를 빼먹지 않아야 함을 꼭 기억하자!


assert 대신 다른 함수가 들어가는데 self의 assertTure, assertFalse를 사용할 수 있다.

만약 return한 값이 boolean이 아니라 두 개의 값을 비교하고 싶다면(같은지 다른지) self.assertEqual이라는 함수를 사용하며, (a, b)라고 매개변수를 넣어주면 된다. 같다면 true, 다르면 false가 리턴된다.

 

 

 

 

TestCase를 상속받은 집합을 하나 만들었다면, uninttest.main이라는 함수를 반드시 실행해주어야 한다. 메인 함수를 실행하면 테스트를 실행한다는 의미이다.

 

 

 

 

테스트를 실행하면 이러한 결과를 얻을 수 있다. assert 문을 사용해 코딩할 때는 테스트 코드가 실행되었는지는 에러의 발생 여부에 따라 구별할 수 있었다. 파이썬 유닛테스트에서는 각각의 함수에 대해서 ok인지 fail인지 확인할 수 있다. 결론적으로는 같지만 테스트 결과를 보기 좋게 보여준다.

 

 

 

fail일 때는 이와 같은 결과를 볼 수 있다. 어떤 테스트에서 실패했는지 최종적으로 나온다.


 

실습 3 - unnittest 실습

 

문제 설명

 

 

 

실행해보면 3개 중 하나의 테스트가 실패했다. 이렇게 총 몇 개의 테스트를 돌렸고 어떤 것이 실패했는지 확인할 수 있다.

테스트 코드를 통과했을 때

from helper import is_palindrome

 

이 모든 조건이 성립해야 한다.

여기서 주의할 점은 테스트 코드를 실행하는 함수는 무조건 test_으로 시작해야 한다는 것이다. 이것이 유닛테스트의 파이썬 모듈 규칙이다. 만약 이 test를 빼면 테스트 목록에서 삭제가 된다.
그리고 unittest.main()도 있어야 실행이 된다. 파이썬 unittest를 활용하면 테스트 코드를 간결하게 볼 수 있다. 결과도 알파벳 순으로 정리되어 있다.

 

 

 

스스로 풀어보기

 

 

 

모든 조건이 통과되었다~


 

세번째 단원 학습을 마치고

이로써 3주차 학습도 모두 마쳤다. 이제 늦은 저녁도 조금 쉬었다가 저녁 공부를 시작해보려고 한다. 유닛테스트를 파이썬으로 할 수 있는 방법을 배웠는데 정말 유용했다.
나중에 나도 이 기능을 사용해서 유닛테스트를 해볼 생각이다. 스스로 문제를 풀어보는 것도 정말 좋았다. 처음 디버깅을 시작했을 때보다 디버깅에 대한 이해도와 코드 분석력이 많이 좋아졌음을 느낄 수 있었다.

하루만에 3주차까지 모두 학습해서 이 과목의 80%를 달성했다. 이제 이수증도 나와서 다음 과목으로 진행해도 될 것 같다. 다음은 9학점짜리 과목에 도전해볼 생각이다.
저녁이라 하기에는 조금 늦지만 밤 시간에도 열심히 공부해야지!