Kerangka UnitTest - API Doctest

API doctest berkisar pada dua kelas kontainer berikut yang digunakan untuk menyimpan contoh interaktif dari docstrings -

  • Example - Pernyataan Python tunggal, dipasangkan dengan keluaran yang diharapkan.

  • DocTest - Kumpulan Contoh, biasanya diekstrak dari satu file docstring atau teks.

Kelas pemrosesan tambahan berikut ditentukan untuk menemukan, mengurai, dan menjalankan, dan memeriksa contoh doctest -

  • DocTestFinder - Menemukan semua docstring dalam modul tertentu, dan menggunakan DocTestParser untuk membuat DocTest dari setiap docstring yang berisi contoh interaktif.

  • DocTestParser - Membuat objek doctest dari string (seperti docstring objek).

  • DocTestRunner - Menjalankan contoh dalam doctest, dan menggunakan OutputChecker untuk memverifikasi keluarannya.

  • OutputChecker - Membandingkan keluaran aktual dari contoh doctest dengan keluaran yang diharapkan, dan memutuskan apakah keluaran tersebut cocok.

Kelas DocTestFinder

Ini adalah kelas pemrosesan yang digunakan untuk mengekstrak doctests yang relevan dengan objek tertentu, dari docstringnya dan docstring dari objek yang ada di dalamnya. Doctests saat ini dapat diekstrak dari jenis objek berikut - modul, fungsi, kelas, metode, metode statis, metode kelas, dan properti.

Kelas ini mendefinisikan metode find (). Ia mengembalikan daftar doctests yang didefinisikan oleh objek docstring, atau oleh salah docstrings benda yang terkandung.

DocTestParser Class

Ini adalah kelas pemrosesan yang digunakan untuk mengekstrak contoh interaktif dari string, dan menggunakannya untuk membuat objek DocTest. Kelas ini mendefinisikan metode berikut -

  • get_doctest() - Ekstrak semua contoh doctest dari string yang diberikan, dan kumpulkan menjadi file DocTest obyek.

  • get_examples(string[, name]) - Ekstrak semua contoh doctest dari string yang diberikan, dan kembalikan sebagai daftar Examplebenda. Nomor baris berbasis 0. Nama argumen opsional adalah nama yang mengidentifikasi string ini, dan hanya digunakan untuk pesan kesalahan.

  • parse(string[, name]) - Bagi string yang diberikan menjadi contoh dan teks intervensi, dan kembalikan sebagai daftar bolak-balik Examplesdan string. Nomor baris untukExamplesberbasis 0. Nama argumen opsional adalah nama yang mengidentifikasi string ini, dan hanya digunakan untuk pesan kesalahan.

Kelas DocTestRunner

Ini adalah kelas pemrosesan yang digunakan untuk menjalankan dan memverifikasi contoh interaktif di DocTest. Metode berikut ditentukan di dalamnya -

report_start ()

Laporkan bahwa runner pengujian akan memproses contoh yang diberikan. Metode ini disediakan untuk mengizinkan subclass dariDocTestRunneruntuk menyesuaikan keluaran mereka; itu tidak harus dipanggil secara langsung

report_success ()

Laporkan bahwa contoh yang diberikan berjalan dengan sukses. Metode ini disediakan untuk memungkinkan subclass DocTestRunner menyesuaikan keluarannya; itu tidak harus dipanggil secara langsung.

report_failure ()

Laporkan bahwa contoh yang diberikan gagal. Metode ini disediakan untuk mengizinkan subclass dariDocTestRunneruntuk menyesuaikan keluaran mereka; itu tidak harus dipanggil secara langsung.

report_unexpected_exception ()

Laporkan bahwa contoh yang diberikan memunculkan pengecualian yang tidak terduga. Metode ini disediakan untuk memungkinkan subclass DocTestRunner menyesuaikan keluarannya; itu tidak harus dipanggil secara langsung.

jalankan (uji)

Jalankan contoh dalam pengujian (objek DocTest), dan tampilkan hasilnya menggunakan fungsi penulis keluar .

meringkas ([verbose])

Cetak ringkasan semua kasus uji yang telah dijalankan oleh DocTestRunner ini, dan kembalikan tuple TestResults (gagal, dicoba). Argumen verbose opsional mengontrol seberapa detail ringkasannya. Jika verbositas tidak ditentukan, maka verbositas DocTestRunner digunakan.

Kelas OutputChecker

Kelas ini digunakan untuk memeriksa apakah keluaran aktual dari contoh doctest cocok dengan keluaran yang diharapkan.

Metode berikut ditentukan di kelas ini -

check_output ()

Kembali Truejika keluaran aktual dari sebuah contoh ( mendapat ) cocok dengan keluaran yang diharapkan ( inginkan ). String ini selalu dianggap cocok jika identik; tetapi bergantung pada tanda opsi apa yang digunakan runner pengujian, beberapa jenis pencocokan tidak tepat juga dimungkinkan. Lihat bagian Option Flags and Directive untuk informasi lebih lanjut tentang option flags.

output_difference ()

Kembalikan string yang menjelaskan perbedaan antara keluaran yang diharapkan untuk contoh yang diberikan ( contoh ) dan keluaran aktual ( didapat ).

Integrasi DocTest dengan Unittest

Modul doctest menyediakan dua fungsi yang dapat digunakan untuk membuat rangkaian pengujian yang paling lengkap dari modul dan file teks yang berisi doctests. Untuk mengintegrasikan dengan penemuan pengujian yang tidak terkalahkan, sertakan fungsi load_tests () dalam modul pengujian Anda -

import unittest
import doctest
import doctestexample

def load_tests(loader, tests, ignore):
   tests.addTests(doctest.DocTestSuite(doctestexample))
   return tests

TestSuite gabungan dari pengujian dari unittest serta doctest akan dibentuk dan sekarang dapat dijalankan dengan metode main () modul atau run ().

Berikut ini adalah dua fungsi utama untuk membuat unittest.TestSuite contoh dari file teks dan modul dengan doctests -

doctest.DocFileSuite ()

Ini digunakan untuk mengonversi tes doctest dari satu atau lebih file teks ke file unittest.TestSuite. Unittest.TestSuite yang dikembalikan harus dijalankan oleh kerangka kerja unittest dan menjalankan contoh interaktif di setiap file. Jika salah satu contoh dalam file gagal, maka pengujian unit yang disintesis gagal, dan afailureException pengecualian dimunculkan dengan menampilkan nama file yang berisi tes dan nomor baris (terkadang perkiraan).

doctest.DocTestSuite ()

Ini digunakan untuk mengubah tes doctest untuk modul menjadi unittest.TestSuite.

Unittest.TestSuite yang dikembalikan harus dijalankan oleh kerangka kerja unittest dan menjalankan setiap doctest dalam modul. Jika salah satu doctests gagal, maka unit test yang disintesis gagal, dan afailureException pengecualian dimunculkan dengan menampilkan nama file yang berisi tes dan nomor baris (terkadang perkiraan)

Di bawah sampulnya, DocTestSuite () membuat file unittest.TestSuite dari instance doctest.DocTestCase, dan DocTestCase adalah subkelas dari unittest.TestCase.

Demikian pula, DocFileSuite () membuat unittest.TestSuite dari instance doctest.DocFileCase, dan DocFileCase adalah subkelas dari DocTestCase.

Jadi, kedua cara membuat unittest.TestSuite menjalankan instance DocTestCase. Saat Anda menjalankan fungsi doctest sendiri, Anda bisa mengontrol opsi doctest yang digunakan secara langsung, dengan meneruskan flag opsi ke fungsi doctest.

Namun, jika Anda menulis kerangka kerja yang paling kecil, pada akhirnya unittest mengontrol kapan dan bagaimana pengujian dijalankan. Pembuat kerangka biasanya ingin mengontrol opsi pelaporan doctest (mungkin, misalnya, ditentukan oleh opsi baris perintah), tetapi tidak ada cara untuk meneruskan opsi melalui unittest ke runner pengujian doctest.