Python TDD(Test Driven Development) 맛보기

Posted by Hide­
2018.11.07 17:54 Coding/Python

실제 서비스를 운영하는 입장에서 생각해보면 코드의 리팩토링은 필수적인 문제이다.

TDD란 Test Driven Development의 약자로써 한글로 쓰자면 "테스트 주도 개발"이다.

이는 코드의 리팩토링 부분과 안정성에도 굉장히 밀접한 관계를 가지고 있다.

자세한 내용은 다들 알고 있을것이라고 생각하고 바로 본론으로 들어간다.

먼저 테스트 작성은 다음과 같은 루틴으로 이루어진다.


1. 테스트 먼저 작성

2. 테스트를 성공시킬 정도의 코드를 작성

3. 테스트가 성공적이라면 리팩토링


간단하게 배열의 값을 모두 더하는 함수와 그 함수를 테스트하는 기능을 구현해본다.

파이썬에서는 기본적으로 unittest라는 라이브러리를 지원하고 있으므로 해당 라이브러리를 사용한다.

테스트 클래스부터 작성한다.


import unittest


class sumTest(unittest.TestCase):
def test_1(self):
self.assertEqual(3, sum([1, 2]))

assertEqual()을 사용하면 두개의 값이 같은 값인지 비교할 수 있다.

이외에도 assertTrue(), assertFalse()등 많은 메소드가 존재하므로 docs에서 확인하자.

1, 2를 합하면 3이므로 3과 동일한지 비교하는 코드이다.

참고로 테스트 클래스는 unittest.TestCase를 상속받아야 하며

내부에서 함수를 정의할 때 함수 이름을 test 로 시작해야 나중에 실행시킬 때 해당 함수를 실행시킨다.

이제 실제 값을 더하는 함수를 작성한다.


def sum(lst):
result = 0
for i in lst:
result += i

return result

간단하게 리스트를 받고 해당 리스트를 모두 더하여 return해준다.

모든 코드를 실행시켜보자.


위에 .은 하나의 함수를 실행했다는 뜻이고 OK가 나왔으니 테스트를 성공했다는 뜻이다.

이제 하나의 함수를 더 추가해본다.


import unittest


def sum(lst):
result = 0
for i in lst:
result += i

return result

class sumTest(unittest.TestCase):
def test_1(self):
self.assertEqual(3, sum([1, 2]))

def test_2(self):
self.assertEqual(5, sum([1, 2, 3]))


if __name__ == '__main__':
unittest.main()

(위 부분에서 빼먹었는데, unittest.main()을 통해 테스트를 실행시킨다)

test_2에서 1, 2, 3을 더하면 6인데 5와 비교하도록 해놨다. 실행시켜본다.


실패했다고 나오며 어떤 함수에서 문제가 발생했는지 알려준다.

이런식으로 기능의 결과값이 맞는지 비교함으로써 테스트를 진행하고

모든 테스트가 완료되었으면 실제 사용하는 함수 부분을 리팩토링하는 형태로 진행하면 된다.

다음 포스팅에서는 실서비스에서 사용할만한 예제를 들고 와야겠다.



다른 사람들이 많이 읽은 글
이 댓글을 비밀 댓글로

티스토리 툴바