Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Melaksanakan Ujian Unit Dinamik dengan Parameterisasi dalam Python?

Bagaimanakah Saya Boleh Melaksanakan Ujian Unit Dinamik dengan Parameterisasi dalam Python?

Linda Hamilton
Linda Hamiltonasal
2024-11-23 20:52:13899semak imbas

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

Ujian Unit Dinamik dalam Python dengan Parameterisasi

Pengenalan

Parameterisasi ialah teknik dalam unit ujian yang mengautomasikan penciptaan ujian dengan set data input yang berbeza. Ini membolehkan pembangun menguji kod mereka secara menyeluruh dengan pelbagai senario, memastikan keteguhan dan kebolehpercayaannya.

Parametrizing dengan Penghias pytest

Satu pilihan popular untuk parametrisasi ialah menggunakan penghias pytest. Hanya tambahkan penghias @parametrize pada kelas ujian anda, diikuti dengan senarai nilai seperti berikut:

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)

Penghias ini akan menjana ujian berasingan secara automatik untuk setiap set nilai dalam senarai.

Pemparameteran dengan Pustaka berparameter

Pilihan lain ialah menggunakan perpustakaan berparameter. Begini rupa ujian yang sama menggunakan pustaka ini:

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)

Dalam kedua-dua kes, hasilnya adalah sama: berbilang ujian dijana berdasarkan data yang disediakan, membolehkan anda menguji kod anda dengan teliti.

Pendekatan Asal untuk Parameterisasi

Walaupun kaedah yang diterangkan di atas adalah moden dan meluas digunakan, terdapat pendekatan lama yang menjana kaedah ujian secara dinamik. Walau bagaimanapun, pendekatan ini tidak lagi biasa digunakan dan disebut atas sebab sejarah sahaja:

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()

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Ujian Unit Dinamik dengan Parameterisasi dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn