가치 검증을 다루는 많은 클래스가 있습니다. 예를 들어, RangeValidator
클래스는 값이 지정된 범위 내에 있는지 확인합니다.
모든 유효성 검사기 클래스에는 값 is_valid(value)
을 반환 True
하거나 False
값에 따라 달라지며 ensure_valid(value)
지정된 값을 확인하고 값이 유효한 경우 아무 것도 수행하지 않거나 값이 미리 정의 된 규칙과 일치하지 않으면 특정 예외가 발생합니다.
현재이 방법과 관련된 두 가지 단위 테스트가 있습니다.
유효하지 않은 값을 전달하고 예외가 발생했는지 확인합니다.
def test_outside_range(self): with self.assertRaises(demo.ValidationException): demo.RangeValidator(0, 100).ensure_valid(-5)
유효한 값을 전달하는 것입니다.
def test_in_range(self): demo.RangeValidator(0, 100).ensure_valid(25)
두 번째 테스트는 예외를 처리하면 실패하고 ensure_valid
아무 것도 처리하지 않으면 성공합니다 assert
. 내부에 s 가 없다는 사실이 이상하게 보입니다. 그러한 코드를 읽는 사람은 즉시 아무것도하지 않는 것처럼 보이는 테스트가 왜 있는지 스스로에게 묻습니다 .
값을 반환하지 않고 부작용이없는 방법을 테스트 할 때 이것이 현재 관행입니까? 아니면 다른 방법으로 테스트를 다시 작성해야합니까? 아니면 내가하고있는 일을 설명하는 의견을 적어보십시오.
self
참조를 위해 저장 ) 결과를 반환하지 않는 함수가 있으면 순수한 함수가 아닙니다.
void
은 많은 언어에서 호출 되고 어리석은 규칙이있는 "단위 유형을 반환합니다"라고 해석됩니다 ). 루프 ( "결과를 반환하지 않는 경우에도 작동합니다"는 실제로 결과를 반환하지 않음을 의미합니다.
unit -> unit
유닛 마술 특수 맡았다 표준 데이터 형식 대신에 뭔가를 고려 모든 언어는. 불행히도, 그것은 단지 단위를 반환하고 다른 것은 수행하지 않습니다.