-
파이썬으로 TDD 진행해보기(feat. unittest 예제)Programing/TDD 2022. 11. 24. 01:11반응형
스터디 도서의 내용을 실습하기 이전에,
파이썬으로 TDD를 진행할 수 있는지 자체를 먼저 확인해 봐야겠습니다.
엄밀히 따지면, 이 글의 제목은 잘못되었습니다.
"TDD 진행해보기"가 아니라, "코드 테스트하기"가 더 정확할 겁니다.
그치만 전 TDD를 공부하기 위해서 unittest를 사용하는거니까요...
import unittest
파이썬에서는 기본 라이브러리인 unittest를 이용해서 TTD를 진행할 수 있습니다.
unittest는 코드를 테스트할 수 있도록 도와주는 라이브러리입니다.
unittest를 활용하면 코드 테스트도 할 수 있고, 테스트가 가능하니 TDD도 진행할 수 있습니다.
아래는 덧셈,뺄셈,곱셈,나눗셈을 할 수 있는 calculator.py,
이 calculator.py가 돌아갈 때 문제가 없는지 테스트하는 test_calculator.py의 모습입니다.
그럼 이제 위의 화면과 같이 unittest를 활용해 코드를 테스트 해봅시다.
1. test_calculator.py 만들기
테스트 하고자 하는 코드(calculator.py)는 이미 있다고 가정하겠습니다.
def add(x, y): return x + y def sub(x, y): return x - y def multiply(x, y): return x * y def divide(x, y): return x / y
calculator.py가 있는 디렉토리 안에 테스트코드(test_calculator.py)를 만들어주세요
- 꼭 같은 디렉토리가 아니여도 괜찮습니다. 여기서는 calculator.py를 쉽게 import하기 위함입니다.
- test코드의 이름은 "test_*", "*_test"과 같이 구분 가능한 것이 좋습니다. 아래처럼 테스트 코드를 전부 탐색해서 자동으로 돌려버리는게 가능하기 때문입니다. (이 글에서는 이 내용을 다루지 않습니다.)
python -m unittest discover project_directory "*_test.py"
2. unittest 클래스 상속하고 테스트용 메소드 만들기
import unittest import calculator class TestCalculator(unittest.TestCase): def test_add(self):
- 클래스명(unittetst.TestCase) : 테스트를 돌리기 위해 unittest를 상속받았습니다.
- 모든 메소드는 "test_" : unittest가 자동으로 테스트를 돌려주기 위해서는 이름을 특별하게 지정해주어야 합니다.
unittest는 이름이 "test_"으로 시작하는 메소드만 테스트용으로 취급하기 때문입니다.
3. 메소드 안에 테스트할 내용 넣기
calculator.py의 add함수만 테스트 해보려고 합니다.
import unittest import calculator class TestCalculator(unittest.TestCase): def test_add(self): result = calculator.add(1, 2) self.assertEqual(result, 3) # (result == 3)인지 확인
- unittest.TestCase를 상속받았으므로, 메소드들을 사용할 수 있습니다.
- 여기서는 assertEqual 메소드를 사용했습니다. 둘이 같은 값인지 확인합니다.
같은 값이라면 테스트 성공, 다른 값이라면 테스트 실패입니다. - assertEqual 말고도 다양한 종류가 있습니다.
4. 테스트 돌리기
방법1 : CMD에서 테스트하기 (보편적인 방법)
>python -m unittest test_calculator.py
방법2 : PyCharm에서 테스트하기 (매우 쉬움)
방법3 : if __name__ == '__main__' 추가하기 (나중에 편함)
test_calculator.py가 위의 코드 상태 그대로일 때,
cmd에서 test_calculator.py를 바로 돌리면 아무런 반응이 없습니다. 그냥 클래스 하나 덜렁 있는 코드일 뿐인거죠.
그런데 아래와 같이 설정을 추가해주면
import unittest import calculator class TestCalculator(unittest.TestCase): def test_add(self): result = calculator.add(1, 2) self.assertEqual(result, 3) if __name__ == '__main__': unittest.main()
cmd에서 unittest 모듈을 불러오지 않아도 바로 테스트 코드를 돌릴 수 있습니다.
5. 다른 함수들에 대한 테스트도 추가해주기
import unittest import calculator class TestCalculator(unittest.TestCase): def test_add(self): self.assertEqual(calculator.add(1, 2), 3) def test_sub(self): self.assertEqual(calculator.sub(1, 2), -1) def test_multiply(self): self.assertEqual(calculator.multiply(1, 2), 2) def test_divide(self): self.assertEqual(calculator.divide(1, 2), 0.5) if __name__ == '__main__': unittest.main()
반응형'Programing > TDD' 카테고리의 다른 글
파이썬 TDD 예제: 숫자야구게임 만들기 #2 (feat. unittest) (0) 2023.01.28 파이썬 TDD 예제: 숫자야구게임 만들기 #1 (feat. unittest) (0) 2023.01.28 파이썬 TDD 예제: chapter 03 유료 서비스 만료일 계산기 (feat. unittest) (1) 2022.12.06 파이썬 TDD 예제: chapter 02 암호 검사기 (feat. unittest) (0) 2022.11.27 TDD(Test Driven Development) 사내스터디를 시작하며 (0) 2022.11.23