簡體   English   中英

Python假設 - 為許多測試構建策略一次?

[英]Python Hypothesis - building strategy once for many tests?

我有一個復合,昂貴的構建,但廉價的測試策略。 我必須這樣做:

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

構建示例需要大約4秒鍾,運行斷言的時間可以忽略不計。

最佳實踐要求將這些測試分開。

我不清楚如何結合假設策略和例如。 TestCase.setUp或pytest會話范圍的燈具。 兩者都裝飾夾具並用x = expensive_strategy(); @given(x)調用x = expensive_strategy(); @given(x) x = expensive_strategy(); @given(x)沒有幫助。

一種選擇是將策略用於生成,並忽略測試用例縮減,示例數據庫等。這將使得通過測試套件更快,並且失敗的測試套件更加混亂。 像下面這樣的東西應該工作:

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)在單個測試方法中進行所有斷言。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM