문제

나는 사람들이 테스트가 간단하고 유지 보수가 가능하며, 단위 테스트에서 코드 재사용이 어떻게 될지 모른다는 것을 지키는 사람들은 무엇입니까?

예를 들어,

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조차도 추적 백을 제공하며 테스트 설정이 특정 주장을 가리키지 않는 경우 테스트 실패를 디버깅하는 데 어려움을 겪고 분명히 감각적 인 것으로 전환해야합니다.

다른 팁

동료가 말했듯이 테스트 덤프를 쓸어야합니다.이는 몇 가지 이유가 있으며, 가장 중요한 것은 테스트에서 복잡한 논리를 피하고 싶다는 것입니다.테스트를 "똑똑하게"쓰는 경우 테스트하려고하는 코드와 동일하거나 유사한 논리를 포함하는 경향이 있습니다.즉, 두 장소에서 동일한 실수를 만드는 위험이 있으며 찾으려는 버그를 놓칠 것입니다.

또 다른 이유는 테스트가 테스트하려는 코드 문서로서 테스트를 수행하도록 원합니다.테스트가 많은 기능과 논리를 통해 복잡한 실행 경로가있는 경우 이해하기 쉽지 않습니다.세계에서 가장 좋은 세계에서는 생산 코드가 시험에 한 눈에 한 눈에 띄는 것으로 어떻게 작동하는지 알 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top