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개부터 짜자. 그것도 눈으로만 봐도 바로 함수가 오류가 있는지 아닌지 파악하기 아주 쉬운 데이터를 입력해서! 다들 그렇게 하고 있다. 이 지구상의 최고의 개발자들이 모인 바로 그 회사들에서도!