나는 반복적 인 방식으로 구축 한 객체를 가지고 있습니다. 매 단계마다 테스트하고 싶습니다. 여기에 대한 나쁜 테스트 기능은 다음과 같습니다.nosetests의 하위 테스트에서 테스트를 나누는 적절한 방법
def test_object:
o = object.Object()
o.step1() # in place method
assert(o.step1property)
o.step2() # in place method
assert(o.step2property)
o.step3() # in place method
# ...
이렇게 모든 단계를 거친 후 개체에 원하는 속성이 있는지 확인합니다. 별도의 테스트에서 이러한 호출을 두지 왜 : 당신은 요청할 수 있습니다이 시점에서
def test_object:
o = object.Object()
yield o.step1
assert(o.step1property)
yield o.step2
# ...
: 내가 좋아하는, 수율 키워드를 사용하여 하위 검사로이 분할 할 수 있습니다? 이전 결과의 올바른 출력이 필요한 경우 해당 파일을 .pickle 파일에 넣고 독립적 인으로 만듭니다. 그리고 나는 일반적으로 동의합니다. 그러나 유용하지 않은 유스 케이스가 있습니다. step1()이 클래스를 초기화하고 step2()가 JSON 내보내기라고 가정 해 보겠습니다. 그런 다음 step1()에서 항목을 변경하더라도 JSON 내보내기가 항상 작동하는지 확인해야합니다. .pickle 파일에 의존하는 것은 오래된 것일 수 있기 때문에 위험 할 수 있습니다. JSON 내보내기는 실제로 최신 객체로 실패 할 때 통과 할 수 있습니다. 두 가지 별도의 테스트에서 어설 션을 분리하고 step1()
을 두 번 실행하면 (자체 테스트에서는 한 번, 테스트 2에서는 한 번의 설치 방법으로 실행), step1()
은 시간이 많이 걸립니다.
이렇게하는 것이 바람직한 방법은 무엇입니까? 수율 이외의 "하위 테스트"를 호출하는 방법이 있습니까? 해당 하위 테스트의 반환 값을 얻을 수 있습니까? 제 경우에는 출력 디렉토리에 모든 테스트 결과를 저장하고 있기 때문에 JSON 문자열을 갖고 싶습니다. 그리고 문자열을 write_to_output_dir
함수에 전달하고 싶습니다 (잘못된 디자인 인 경우 알려주세요!).
본인의 테스트는 원자 적이어야한다는 데 동의합니다. 즉, JSON 내보내기는 이전 기능이 변경 되더라도 작동해야합니다. 공장 파일에 대한 JSON 내보내기를 테스트하는 함수가 있지만, 항상 해당 팩토리 파일을 업데이트하지 않고도 현재 버전의 객체에 대해 테스트하고 싶습니다 (매우 자주 사용됩니다!). 별도의 클래스에 관해서는 : 위의 코드는 읽기 쉽도록 단순하게 유지했습니다. 내 코드의 진짜 질문은 테스트를 하위 테스트로 분할하는 방법 이었으므로 하위 테스트를 호출하는 것이 중요했습니다. –
(이전 코멘트를 계속 :) 귀하의 답변에서 나는 사람들이 일반적으로 하위 테스트를하지 않는 것을 읽었습니다. 내가 연계 된 기술 토크를 살펴보고 더 나은 테스트를 이해하는 데 도움이되기를 바랍니다. 도와 줘서 고마워! –