2017-05-05 47 views
0

我有一個複合,價格昂貴但價格便宜的策略。我必須這樣做:Python假設 - 爲許多測試構建策略一次?

@given(expensive_strategy()) 
def test_all(x): 
    assert... 
    assert... 
    ... 

建立示例和運行斷言的時間可以忽略不計4秒。

最佳做法決定將這些測試分開。

我不清楚我如何可以結合假設策略和例如。 TestCase.setUp或pytest會話範圍的燈具。裝飾夾具和呼叫x = expensive_strategy(); @given(x)都沒有幫助。

+0

['會議範圍的燈具](https://docs.pytest.org/en/latest/fixture.html#sharing-a-fixture-across-tests-in-a-module-or-類會議)? –

回答

1

一種選擇是使用戰略例如發電,而忽略測試用例萎縮,示例數據庫等,這將使通過的測試套件更快,失敗的測試套件更加混亂。像下面這樣的東西應該工作:

class MyTest(TestCase): 
    @classmethod # or however this is done in your test runner 
    def setUpClass(cls): 
     strategy = expensive_strategy() 
     cls.examples = [strategy.example() for _ in range(1000)] 

    def test_all(self): 
     for x in self.examples: 
      assert invariant(x) 

另一種選擇是裂傷假說的內部,使每個測試用例得到相同的字節流,並做無論是在構建戰略慢緩存,雖然這肯定會違反「最佳做法「。個人而言,當他們導致像一個慢速測試套件那樣荒謬的結果時,我只是不會遵循「最佳實踐」,並且可能通過調用諸如assert_a_particular_kind_of_assertion(x)等幫助方法來在單個測試方法中作出所有斷言。

+0

假設的作者指出,第一個選項並不是一個好的策略,因爲'.example()'不代表'假設'會在普通測試運行中做什麼。 – RecursivelyIronic