(예 : 단위 테스트의 어설 션) 생성자 개체를 인트로 스하는 기술이 있습니까?생성기 개체에 대한 어설 션
>>> raw_data = ["${}".format(RND.randint(10, 100)) for c in range(10)]
>>> # a function that does some sort of of transform
>>> fnx = lambda q: float(q.replace('$', ''))
>>> d1 = [fnx(itm) for itm in raw_data]
: 어떤 임의의 데이터를 생성
: 구체적
나는 작은과 같이 종종 지능형리스트 또는 발전기 식 내부 값에 적용 함수들의 시퀀스로 구성된 데이터 처리 파이프 라인을 가지고
다음 단계에서 다른 변환 함수는 d1 등의 항목에 적용됩니다.
>>> assert len(d1) == 10
: prices_clean, 또는 등의 값의 최소/최대에의 길이 예를 들어 바로 위의 경우에
, 주장은, 내 단위 테스트 스위트의 핵심입니다 난 그냥이 중간 결과를 반복하기 위하여려고하고 주어진, 내가 실제로 발생 오브젝트 할 것, 목록이 필요하고, 훨씬 낮은 메모리 프로파일을 제공하지 않는, 즉 내가 무엇을 사용 : 물론>>> d1 = (fnx(itm) for itm in raw_data)
주장은 내가 언제 의지하는지에 달려있다. 사용 지능형리스트는 발전기 개체를 사용할 수 없습니다 :
>>> d1
<generator object <genexpr> at 0x106da9230>
>>> assert len(d1) == 10
Traceback (most recent call last):
File "<pyshell#33>", line 1, in <module>
assert len(d1) == 10
TypeError: object of type 'generator' has no len()
난 그냥 어설위한 발전기 객체)을 목록 (호출해야 다음 내 테스트 스위트가 불행한 실제 결과 (매우 느리게 실행되는 경우 DEBS 종종 전혀 실행하지 않음).
내가 유용하게 내성을 가질 수있는 생성기 개체의 특성을 살펴 봤지만 여기서 설명한 방법으로 어떻게 자주 사용할 수 있는지 알지 못했습니다.
생성기는 객체 :
경우 발전기 요소의 적은 수의 생산 :
보통 나는 다음 중 하나를 수행 실제로 실제로 작동하고 반환 할 결과가 몇 개인 지 미리 알지 못합니다. 실제로 그것을 소비하는 것 이외의 발전기의 "길이"를 얻을 방법이 없습니다. – georg
생성 된 순서를 검사하려면'the_sequence = list (the_generator)'를 수행 한 다음'the_sequence'에 대한 모든 assert를 수행하십시오. 이렇게하면 모든 * single * assert에 대해'list'를 호출하는 것을 피할 수 있습니다 (길이와 내용을 단일 실행으로 지정할 수 있기 때문에). – Bakuriu