Q. 유명 개발자들은 파이썬 테스트 코드를 어떻게 작성할까?
A. 사례를 찾아보면 진짜 생각보다 간단하게 짠다.
테스트 코드 작성 어렵다. 작성하면서도 이게 과연 올바른가 의심될 때가 있다. 이럴 때는 유명 개발자들은 어떻게 하는지 찾아보는 것만으로도 큰 도움이 된다. 게다가 개발 바닥은 쉽게 찾을 수 있으니!
구글
구글부터 살펴보자.
github에서 구글로 들어가서, 언어는 파이썬, 정렬은 별개수로 하자.
목록 상단에 있는 google / jax를 골랐다. 여기 들어가니 tests 디렉터리가 있다!
여러 테스트 파일 중 core_test.py를 보자.
tree_flatten이란 함수를 테스트하는 코드는 아래가 다다.
값은 직접 입력했고, 입력한 값은 아주 간단한 것을 볼 수 있다. 10개가 아니라 1개다.
def test_tree_flatten(self):
flat, _ = tree_flatten(({'a': 1}, [2, 3], 4))
assert flat == [1, 2, 3, 4]
마이크로소프트
이번에는 마이크로소프트를 살펴보자.
github에서 마이크로소프트를 들어가서, 언어는 파이썬, 정렬은 별개수로 하자.
여기서 microsoft / recommenders란 저장소를 골랐다.
가장 이해하기 쉬운 테스트를 찾다가 test_generals_utils.py 을 열어봤다.
def test_invert_dictionary():
d = {"a": 1, "b": 2}
d_inv = invert_dictionary(d)
assert d_inv == {1: "a", 2: "b"}
def test_get_number_processors():
assert get_number_processors() >= 1
역시나 invert_dictionary란 함수를 테스트하기 위해서 여러개 데이터를 입력하지 않고 달랑 1개만 입력해서 테스트했다.
그것도 무작위로 만들기보다 진짜 이해하기 쉬운 숫자로!
아마존
이번에는 아마존을 찾아봤다. aws / aws-cli란 저장소를 골랐다.
쉽게 이해할 수 있는 unit 테스트에서 파일을 열어 봤다.
def test_binary_file(self):
contents = 'This is a test'
filename = self.files.create_file('foo', contents)
prefixed_filename = 'fileb://' + filename
data = self.get_paramfile(prefixed_filename)
self.assertEqual(data, b'This is a test')
self.assertIsInstance(data, six.binary_type)
역시나 랜덤을 쓰기 보다는 아주 간단한 문장을 넣어서 테스트했다. "This is test".
에러 경우에는 메소드명에 에러 테스트인지 알 수 있게 해놓았다.
def test_file_does_not_exist_raises_error(self):
with self.assertRaises(ResourceLoadingError):
self.get_paramfile('file://file/does/not/existsasdf.txt')
전 세계 유명한 IT 기업들의 깃허브 저장소에 들어가서 테스트 코드를 살펴봐도 별 게 없단 것을 알 수 있다.
특별히 한 함수에 대한 유닛 테스트를 10개씩 짜지도 않았고, 특별히 무작위 입력 방식을 쓰지도 않았다.
그저 눈으로 쉽게 확인할 수 있게 아주 간단한 입력값을 넣은 것을 확인할 수 있었다.
테스트 코드 자체를 복잡하게 쓴 경우는 거의 보지 못했고, 코드의 반복을 줄이기 위해서 parameterised를 쓴 정도였다.
@parameterized.parameters([
(1, 2, 3),
(
np.asarray(1, np.int32),
np.asarray(2, np.int32),
np.asarray(3, np.int32),
),
])
가짜 데이터 생성 팩키지인 faker를 쓴 경우는 찾아볼 수 없었다.
함수 하나를 제대로 테스트 하기 위해서는 그래 한 10개 테스트는 짜야 하는 거 아닌가? 이렇게 생각했는데, 실제 그렇게 짠 경우는 거의 볼 수 없었다. 단순한 거 하나만 테스트해도 일단 의도대로 작동하는지 알 수 있으니까 그런 거 같다.
그냥 아주 간단하게 1개부터 짜자. 그것도 눈으로만 봐도 바로 함수가 오류가 있는지 아닌지 파악하기 아주 쉬운 데이터를 입력해서! 다들 그렇게 하고 있다. 이 지구상의 최고의 개발자들이 모인 바로 그 회사들에서도!