2016-12-09 4 views
0

내장 된 가설 전략은 기능을 통해 제공됩니다 (예 : 실제 전략보다는 integers은 전략을 만드는 기능 임). 그것은 나에게 전략 목표가 내부 상태임을 시사한다. 위의 두 가짜 테스트에서여러 테스트에서 사용되는 가설 전략을 인스턴스화해야합니까?

@given(integers()) 
def test_foo(n): 
    assert n > 0  
@given(integers()) 
def test_bar(n): 
    assert n < 100 

는 각 테스트는 integers의 다른 호출에서 다른 전략 객체를 (얻는다 나는 다음과 같은 내 자신의 전략 만드는 경우 :. 다음 사용 ...

positive_integers = integers().filter(lambda x: x > 0) 

을 이 같은 시험 :.

@given(positive_integers) 
def test_foo(n): 
    assert n > 0  
@given(positive_integers) 
def test_bar(n): 
    assert n < 100 

그들은 같은 전략 객체를 공유 잘못 될 수있는 것처럼이 나에게 소리,하지만 examples in the docs이의 그것을 수행 방법 오메 경우 (NodeStrategyNodeSet의 정의 참조). 내가 같은 함수의 전략 구성을 포장하여이를 피해야한다 :

positive_integers = lambda: integers().filter(lambda x: x > 0) 
#... 
@given(positive_integers()) 

답변

1

은 내가 source code에보고했다, 당신은 테스트에서 동일한 전략 객체를 공유 할 괜찮을 것 같습니다. 전략에 대해 다른 매개 변수를 전달할 수 있도록 함수를 호출하는 것처럼 보입니다.

는 나는 당신이이 작업을 수행 할 수 있음을 의미 생각 :

@given(integers(min_value=0)) 
def test_foo(n): 
    assert n > 0  
@given(integers(min_value=0)) 
def test_bar(n): 
    assert n < 100 

나이 : 나는 범위의 경계를 넘어 국가의 증거를 볼 수 없었다

positive_integers = integers(min_value=0) 

@given(positive_integers) 
def test_foo(n): 
    assert n > 0  
@given(positive_integers) 
def test_bar(n): 
    assert n < 100 

합니다.

def do_draw(self, data): 
    return d.integer_range(data, self.start, self.end) 

그러나, 나는 단지 가설에 조금을했다, 그래서 난 분명 틀릴 수도 : 사실, BoundedIntStrategy 매개 변수로 전달 된 검색 데이터를 얻을 것으로 보인다.