단위 테스트에서 코드 재사용 가능성?
-
21-12-2019 - |
문제
나는 사람들이 테스트가 간단하고 유지 보수가 가능하며, 단위 테스트에서 코드 재사용이 어떻게 될지 모른다는 것을 지키는 사람들은 무엇입니까?
예를 들어,
def test_some_1():
...some code
def test_some_2():
...code repeated from test_some_1
.
는 필요한 어설 션을 보유하는 함수의 두 테스트에서 반복 된 코드를 캡슐화하는 것이 가장 좋지 않습니까?
나는 이것에 관한 일부 프로그래머들과 논쟁 해 왔으며, 그들은 동의하지 않으며, 테스트는 바보 같아야한다고 말했다. 그 코드 재사용은 여기에 좋지 않다. 그 이유는 코가 실제로 실제로 실패했기 때문에 주장이 실제로 실패했기 때문에 단언이 실제로 실제로 실패했기 때문에 주장이 실패했기 때문입니다. 왜냐하면 나는 코와 함께 사용하기 때문에 비록 동의하지만, 나는 테스트와 추적 백을 줄 것입니다. 녀석들은 코를없이 개별적으로 호출 할 수 있음을 다시 한 번도 다시 불쾌감을 느끼게됩니다.
당신은 무엇을 생각하니?
- 는 단위 테스트에서 코드 재사용 성을 사용하는 것이 좋습니다.
- 재 사용성이 사용될 수있는 경우 핀을 가리키는 것과 관련된 다른 문제를 극복하는 방법은 무엇입니까?
해결책
명확성과 가독성과 같은 코드 품질에 대한 가장 중요한 요소는 테스트 코드에도 중요합니다.코드 반복을 쉽게 읽을 수 있으면 쓰는 테스트 코드가 있는지 여부에 관계없이 해당해야합니다.
예를 들어, 한 패키지에서는 썼습니다.
함수가있었습니다.def _test_vector(self, a, b, c):
# test the function with parameter values a, b, c
# several asserts here to verify output of function tested
.
다음과 같은 모든 테스트 벡터를 쓰는 것입니다.
def test_vector1(self):
self._test_vector(a=42, b=5, c="blah)
.
IMO는 개별 테스트만이 해당 테스트와 관련된 정보 만 포함되므로 명확성을 향상시킵니다.
정확한 어설 션은 항상 쉽게해야합니다.unittest
조차도 추적 백을 제공하며 테스트 설정이 특정 주장을 가리키지 않는 경우 테스트 실패를 디버깅하는 데 어려움을 겪고 분명히 감각적 인 것으로 전환해야합니다.
다른 팁
동료가 말했듯이 테스트 덤프를 쓸어야합니다.이는 몇 가지 이유가 있으며, 가장 중요한 것은 테스트에서 복잡한 논리를 피하고 싶다는 것입니다.테스트를 "똑똑하게"쓰는 경우 테스트하려고하는 코드와 동일하거나 유사한 논리를 포함하는 경향이 있습니다.즉, 두 장소에서 동일한 실수를 만드는 위험이 있으며 찾으려는 버그를 놓칠 것입니다.
또 다른 이유는 테스트가 테스트하려는 코드 문서로서 테스트를 수행하도록 원합니다.테스트가 많은 기능과 논리를 통해 복잡한 실행 경로가있는 경우 이해하기 쉽지 않습니다.세계에서 가장 좋은 세계에서는 생산 코드가 시험에 한 눈에 한 눈에 띄는 것으로 어떻게 작동하는지 알 수 있습니다.