2017-11-02 10 views
0

가끔씩 나는 굳이 확실한 조건을 처리 할 것입니다.하지만 그것이 나오기위한 예제를 생각할 수 없기 때문에 테스트 케이스를 찾을 수 없습니다. 나는 내 코드에 pragma를 추가하는 방법이 있는지 궁금하다. 미래에 어떤 변화가있을 경우 우연히이 줄을 감싸기 시작한다. 필요한 테스트 케이스를 생성하지만 구현 세부 사항으로이 라인의 범위를 허무하게 남겨 둡니다.적용 범위에 해당하는 xfail이 있습니까?

mysquare.py에서 :

def mysquare(x): 
    ov = x * x 

    if abs(ov) != ov or type(abs(ov)) != type(ov): 
     # Always want this to be positive, though why would this ever fail?! 
     ov = abs(ov) # pragma: nocover 

    return ov 

그런 다음 내 테스트 스위트 I로 시작 :이의 인위적인 예를 마련했습니다

from hypothesis import given 
from hypothesis.strategies import one_of, integers, floats 

from mysquare import mysquare 

NUMBERS = one_of(integers(), floats()).filter(lambda x: x == x) 

@given(NUMBERS) 
def test_mysquare(x): 
    assert mysquare(x) == abs(x * x) 

@given(NUMBERS) 
def test_mysquare_positive(x): 
    assert mysquare(x) == abs(mysquare(x)) 

nocover 라인이 명중되지 않습니다 만, 그건 내가 도달 할 수있는 방법을 생각할 수 없기 때문입니다! 그러나 먼 미래의 어떤 시점에서, 나는 mysquare 지원 복소수는, 그래서 NUMBERS을 변경해야한다고 결정 :

이제
NUMBERS = one_of(integers(), floats(), 
       complex_numbers()).filter(lambda x: x == x) 

갑자기 예기치 않게 선을 포함하고있어,하지만 난 경고 아니에요 이 사실. nocover과 같은 것이 있나요? pytest.xfail과 같은 것입니까? - 특정 라인이 테스트없이 처리된다는 긍정적 인 주장입니까? 바람직하게는 pytest과 호환됩니다.

답변

0

Coverage.py에는 아직이 기능이 없지만 흥미로운 내용입니다. 표지되지 않은 것으로 표시된 줄이 실제로 덮여 있다는 경고입니다. 어려운 해킹으로, 당신은 당신의 nocover pragma를 무력하게하는 것과 같은 것을 할 수 있고, 커버 된 라인을 모으고, pragma로 라인 넘버와 비교할 수 있습니다 .... Ick.