Bagaimana hubungannya assert almost equal
dengan py.test untuk mengapung tanpa menggunakan sesuatu seperti:
assert x - 0.00001 <= y <= x + 0.00001
Lebih khusus akan berguna untuk mengetahui solusi yang rapi untuk dengan cepat membandingkan pasangan float, tanpa membongkar mereka:
assert (1.32, 2.4) == i_return_tuple_of_two_floats()
python
unit-testing
pytest
Vladimir Keleshev
sumber
sumber
Jawaban:
Saya perhatikan bahwa pertanyaan ini secara khusus bertanya tentang py.test. py.test 3.0 termasuk
approx()
fungsi (well, really class) yang sangat berguna untuk tujuan ini.Dokumentasi ada di sini: https://docs.pytest.org/en/latest/reference.html#pytest-approx
sumber
assert [0.1 + 0.2, 0.2 + 0.4] == pytest.approx([0.3, 0.6])
assert {'a': 0.1+0.2} == pytest.approx({'a': 0.3})
assert [[0.1 + 0.2], [0.2 + 0.4]] == pytest.approx([[0.3], [0.6]])
mengarah ke aTypeError
. Jika ternyata Numpynp.testing.assert_allclose([[0.1 + 0.2], [0.2 + 0.4]], [[0.3], [0.6]])
(lihat jawaban di bawah) berhasil untuk kasus ini.Anda harus menentukan apa yang "hampir" untuk Anda:
untuk diterapkan pada tupel (atau urutan apa pun):
sumber
x - d <= y <= x+d
, sepertinya itulah yang dimaksud OP juga. Jika Anda tidak ingin menentukan ambang secara eksplisit untuk 'hampir', lihat jawaban @ jiffyclub.pytest.approx
. Menulis fungsi perkiraan Anda sendiri adalah ide yang buruk. (Jawaban dalam jawaban ini bahkan tidak sebaik jawaban yang disertakan.)Jika Anda memiliki akses ke NumPy, ia memiliki fungsi hebat untuk perbandingan titik mengambang yang sudah melakukan perbandingan berpasangan
numpy.testing
.Maka Anda dapat melakukan sesuatu seperti:
sumber
Sesuatu seperti
Itulah yang unittest tidak
Untuk bagian kedua
Mungkin lebih baik untuk membungkusnya dalam suatu fungsi
sumber
Jawaban ini sudah ada sejak lama, tetapi saya pikir cara termudah dan juga paling mudah dibaca adalah menggunakan unittest untuk banyak asersi bagus tanpa menggunakannya untuk struktur pengujian.
Dapatkan pernyataan, abaikan sisa unittest.TestCase
(berdasarkan jawaban ini )
Buat beberapa pernyataan
Laksanakan tes pembongkaran otomatis pertanyaan asli
Cukup gunakan * untuk membongkar nilai pengembalian Anda tanpa harus memasukkan nama baru.
sumber
Jika Anda menginginkan sesuatu yang berfungsi tidak hanya dengan float tetapi misalnya Desimal Anda dapat menggunakan python
math.isclose
:Documents - https://docs.python.org/3/library/math.html#math.isclose
sumber
Saya akan menggunakan nose.tools. Ini dimainkan dengan baik oleh pelari py.test dan memiliki pernyataan yang sama bermanfaat lainnya - assert_dict_equal (), assert_list_equal (), dll.
sumber