首頁  >  文章  >  後端開發  >  如何在Python中透過參數化實現動態單元測試?

如何在Python中透過參數化實現動態單元測試?

Linda Hamilton
Linda Hamilton原創
2024-11-23 20:52:13806瀏覽

How Can I Implement Dynamic Unit Testing with Parameterization in Python?

參數化的Python 動態單元測試

簡介

參數化是單元中的一種技術使用不同的輸入資料集自動建立測試的測試。這使得開發人員可以在各種場景下徹底測試他們的程式碼,確保其健全性和可靠性。

使用 pytest 的裝飾器進行參數化

參數化的一個流行選項是使用 pytest 的裝飾器。只需將 @parametrize 裝飾器新增至您的測試類別中,然後新增以下值清單:

from pytest import mark

class TestSequence(unittest.TestCase):

    @mark.parametrize(
        ["name", "a", "b"],
        [
            ["foo", "a", "a"],
            ["bar", "a", "b"],
            ["lee", "b", "b"],
        ]
    )
    def test_sequence(self, name, a, b):
        self.assertEqual(a, b)

此裝飾器將為清單中的每組值自動產生單獨的測試。

使用參數化函式庫進行參數化

另一個選擇是使用參數化函式庫。使用此函式庫進行相同測試的效果如下:

from parameterized import parameterized

class TestSequence(unittest.TestCase):

    @parameterized.expand([
        ["foo", "a", "a"],
        ["bar", "a", "b"],
        ["lee", "b", "b"],
    ])
    def test_sequence(self, name, a, b):
        self.assertEqual(a, b)

在這兩種情況下,結果是相同的:根據提供的資料產生多個測試,使您可以徹底測試程式碼。

參數化的原始方法

雖然上述方法是現代且廣泛使用的,但動態產生測試方法的舊方法。然而,這種方法不再常用,僅出於歷史原因而被提及:

import unittest

l = [["foo", "a", "a",], ["bar", "a", "b"], ["lee", "b", "b"]]

class TestSequense(unittest.TestCase):
    pass

def test_generator(a, b):
    def test(self):
        self.assertEqual(a,b)
    return test

if __name__ == '__main__':
    for t in l:
        test_name = 'test_%s' % t[0]
        test = test_generator(t[1], t[2])
        setattr(TestSequense, test_name, test)
    unittest.main()

以上是如何在Python中透過參數化實現動態單元測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn