.
QC 당신이 & NBSP를 성립하고, 컴퓨터가 이러한 속성이 실제로 보유 있는지 확인하기 위해 무작위 테스트 케이스를 생성 할 것으로 예상 속성을 작성할 수있는 테스트 도구이다 예를 들어, 압축을 작성하는 함수의 압축을 해제 한 경우 일부 데이터 압축 프로그램은 시험에 명백한 속성은 압축 문자열을 압축 해제하면 원래 문자열을 돌려 준다이다. 다음은 그 표현 할 수 방법은 다음과 같습니다
수입 유닛 테스트
수입 품질 관리
클래스 TestCompression (unittest.TestCase) :
& NBSP; @ qc.property
& NBSP; 데프 test_compress_decompress (자기) :
& NBSP; "" ". 테스트가 압축 및 반환에 원래 데이터의 압축을 풀어야" ""
& NBSP; 데이터 = qc.str () # 임의의 문자열. 값은 무작위된다.
& NBSP; self.assertEqual (데이터의 압축을 풀고 (압축 (데이터))를 repr (데이터))
즉, (너무 많은 보일러가 이유입니다) 파이썬의 내장 유닛 테스트 프레임 워크와 보통 검사입니다. 또는, 당신은 최소한 자세한 매우 즐거운 코처럼, 다른 테스트 프레임 워크와 동일한 일을 할 수 있습니다. @의 qc.property의 장식은 장식 기능을 여러 번 실행하고, 때마다 값이 (가) 다른 qc.string 같은 기능에 의해 반환. 즉, QuickCheck 밖에 거의 모든 단위 테스트 프레임 워크와 호환; 그것은 특히 요구 아니에요.
qc.str 같은 함수 (), qc.int () 등, 어떤 형태의 임의의 값을 생성한다. 위의 예에서, 우리는 속성이 모든 문자열에 대한 사실이 보유하고 있다고 주장하고 있습니다. 당신이 테스트를 실행하면, QuickCheck 테스트를 위해 무작위 문자열을 생성합니다.
당신은 내가, "무작위", "랜덤"하지 말 것을 알 수 있습니다. 이것은 의도적 인 것입니다. 값의 분포는 영어 텍스트가 포함 된 흥미로운 값, 빈 문자열처럼, 또는 중간에 NUL 문자가 포함 된 문자열 또는 문자열을 포함하는 쥐게된다. 일반적으로, QuickCheck 영리 까다로운 가치와 난수의 좋은 혼합을 제공하려고합니다. 이것은 당신이 그것을 할 필요가 없습니다 것을 제외하고, 손으로 정말 철저한 테스트 케이스를 작성해야한다면 당신은 어떻게 할 것인지 본질적으로. 실제로, 컴퓨터가 제정신 데이터를 구성하는 것에 대한 적은 선입견을 가지고, 그래서 종종에 대한 테스트 케이스를 작성하는 당신에게 발생하지 않을 것 버그를 찾을 수 있습니다. 그것은 무의식적으로 버그를 방지하는 방법을 알 수 없습니다.
귀하는 내장 임의의 값 함수에 한정되지있어. 당신은 당신의 자신을 생성하기 위해 빌딩 블록으로 사용할 수 있습니다. 예를 들어 :
클래스 포인트 (객체) :
& NBSP; 데프 __init __ (자기, X, Y) :
& NBSP; self.x, self.y로 = 플로트 (X), 플로트 (Y)
데프 점 () :
& NBSP; "" "임의의 점을 가져옵니다." ""
& NBSP; X = qc.int (-20, 20)
& NBSP; Y = qc.int (-34, 50)
& NBSP; Point를 돌려 (X, Y)
그런 다음 속성에서 임의의 점 값을 생성하는 데 사용할 수 있습니다. 여기에 코 스타일의 테스트는 다음과 같습니다
@ qc.property
데프 test_triangle_inequality () :
& NBSP; PT = 점 ()
& NBSP; ABS (pt.x) + 복근을 주장 (pt.y)> = math.sqrt (pt.x ** 2 + pt.y ** 2), (pt.x, pt.y)
이 프로그램을 실행하면, 뭔가 마법이 발생 : 당신은 (0, 0), (1, 1), (같은 점을 볼 수 있도록 QuickCheck가, 함께, Point 클래스의 x와 y 두 변수에 대한 까다로운 값을 생성하려고합니다 (584 추천 0, 1), (385904, 0)뿐만 아니라, 완전히 랜덤 것들 -35809648). 즉, 단지 일부 까다로운 값 난수 스트림에서 x 및 y 값을 드로잉하기보다는 실제로 QuickCheck x 및 y 좌표의 조합을 교묘 생성 할 것이다.
임의의 데이터를 취득하기위한 기능
- (저, 고) INT는 낮고 높은 옵션 경계 사이의 정수를 제공합니다.
- 긴 (저, 고)이 낮고 높은 옵션의 경계 사이에, 걷고 있습니다.
- (저, 고) 플로트는 낮고 높은 옵션의 경계 사이에 수레를 제공합니다. 없음의 무한 또는 NaN의 값 없습니다.
& NBSP; STR (길이 = 없음, maxlen을 = 없음) 타입의 str의 문자열을 제공합니다. 인코딩은 UTF-8입니다. 길이가 지정되고있는 경우, 문자열이 정확히 그렇게 오래있을 것입니다. MAXLEN이 주어지면, 문자열의 길이는 가장 MAXLEN 자합니다.
- 유니 코드 (길이 = 없음, maxlen을 = 없음) 타입 유니 코드, 유니 코드 문자열을 제공하지 않습니다. 길이가 지정되고있는 경우, 문자열이 정확히 그렇게 오래있을 것입니다. MAXLEN이 주어지면, 문자열의 길이는 가장 MAXLEN 자합니다.
- 이름은 () 유니 코드 이름을 제공합니다. 기본 다국어 평면 외부 바꿈하지 않는 공백, 또는 이메일 주소, 또는 유니 코드 문자가 포함 된 이름 - 이국적인에 "존 스미스"와 같은, 산문에서 이러한 범위. 이름보다 비뚤어진 아무것도, 당신은 인터넷 데이터를 충분히 큰 세트에서 볼 수있는 경우이다.
- nameUtf8 ()는 이름과 동일합니다 () ( 'UTF8')를 인코딩..
- fromList (항목) 목록에서 임의의 항목을 반환합니다. 이것은 자신의 임의의 데이터 생성 기능을 만드는 대부분 유용합니다.
- randstr는 (길이 = 없음, MAXLEN = sys.maxint) 난수 바이트의 문자열을 제공합니다. 길이가 지정되고있는 경우, 문자열이 정확히 그렇게 오래있을 것입니다. MAXLEN이 주어지면, 문자열 길이 바이트 MAXLEN 가장에있을 것입니다.
STR 및 유니 코드에 의해 생성 된 문자열은 무작위, 그러나 어떤 노력 문자열 처리 많은 코드의 버그를 공개하기로 충분히 비뚤어진 만들도록하고있다. 이름 목록은 느슨하게 세상이 미친 것을 더욱 분명 해졌다으로, 또 다시 이상, 실제 데이터에 이름 처리 코드 충돌을 보는 끔찍한 기억을 기반으로, 우리는 진정으로 운명을 정한다. (당신은 충분히 테스트 커버리지 그리고 마지막으로 충돌을 중지 일을 일단이 느낌은 희망이 있습니다. 통과!)
qc.arbitrary의 이름과 문자열 예 데이터는 더 deteministic 테스트 케이스 데이터의 소스로 흥미로운 일이 될 수 있습니다. 어떤이의 빌려 주시기 바랍니다. 내부는 마법,하지만 마법의 내부 부품의, 가장 흥미로운 것들 qc.arbitrary 및 품질 관리에
이 요구 사항 : 있습니다.
파이썬
댓글을 찾을 수 없습니다