아마도 문제는 테스트 문서 문자열을 작성하는 최선의 방법이 아니지만 테스트 자체를 작성하는 방법일까요? 스스로 문서화하는 방식으로 테스트를 리팩토링하면 코드가 변경 될 때 문서 구조가 오래 가지 않을 것입니다.
당신이 테스트를 명확하게하기 위해 할 수있는 몇 가지있다 :
- 명확 & 설명이 시험 방법 이름은 (이미 언급)
- 시험 몸이 명확하고 간결 (자기 문서화)해야
- 멀리 떨어진 복잡한 설정/해체 등은 방법으로
- 더 하시겠습니까? 예를 들어
,이 같은 시험이있는 경우 :
def test_widget_run_returns_0():
widget = create_basic_widget()
return_value = widget.run()
assert return_value == 0
assert_basic_widget(widget)
def create_basic_widget():
widget = Widget(param1, param2, "another param")
widget.set_option(true)
widget.set_temp_dir("/tmp/widget_tmp")
widget.destination_ip = "10.10.10.99"
return widget
def assert_basic_widget():
assert widget.response == "My expected response"
assert widget.errors == None
참고 테스트 방법은 현재로 구성되어있다 : 당신은 메서드 호출로 설정 문을 대체 할 수
def test_widget_run_returns_0():
widget = Widget(param1, param2, "another param")
widget.set_option(true)
widget.set_temp_dir("/tmp/widget_tmp")
widget.destination_ip = "10.10.10.99"
return_value = widget.run()
assert return_value == 0
assert widget.response == "My expected response"
assert widget.errors == None
을 의도에 부합하는 이름을 가진 일련의 메소드 호출, 테스트와 관련된 일종의 DSL. 그런 테스트에도 여전히 문서화가 필요합니까?
테스트 방법은 주로 한 수준의 추상화에만 적용됩니다. 알고리즘을 볼 수 시험 방법을 읽는 사람은 다음과 같습니다
그들의 이해를 기대했던 주장 위젯
에서 실행을 요구하는 위젯
을 만드는 테스트 메소드보다 낮은 추상화 레벨 중 하나 인 위젯을 설정하는 세부 사항에 의해 muddied되지 않습니다. 시험 방법의 첫 번째 버전은 Inline Setup 패턴을 따릅니다. 두 번째 버전은 Creation Method 및 Delegated Setup 패턴을 따릅니다.
일반적으로 나는 코드의 "이유"를 설명하는 경우를 제외하고는 의견에 반대합니다. 삼촌 밥 마틴의 Clean Code을 읽고 나에게 이것을 확신시켰다. 주석에 대한 장이 있으며 테스트 관련 장이 있습니다. 난 그것을 추천 해.
자동 테스트 모범 사례에 대한 자세한 내용은 xUnit Patterns을 확인하십시오.
함수 이름은 무엇입니까?나는 당신이 당신의 테스트 이름을 "testFunctionName"이라고 가정하고 있지만 괜찮습니다,하지만 당신은 심각하게 InitializeSetsUpChessBoardCorrectly라는 함수를 가지고 있습니까? 나는 "setUpChessboard"가 괜찮을 것이라고 생각한다. –
아니요, 메서드 이름이 정확히 무엇을 테스트하는지 설명합니다.이 테스트 사례에서는 initalize()가 체스 보드를 올바르게 설정하는지 확인합니다. 붐, 자동 문서. –
하하 예, 처음에는 "테스트"가 JUnit의 오래된 시절이었습니다. 내 두뇌가 아직 고착되어 있습니다. 단지 이름을 ititalizeSetsUpChessBoardCorrectly()로 지정하고 @Test 주석을 사용할 수 있습니다. –