Saya memiliki kelas yang mewakili keadaan kompleks tertentu. Keadaan itu dapat berubah, dan saya mempunyai contoh lain dari kelas itu yang mewakili keadaan "sebenarnya". Saya menulis sebuah fungsi yang melakukan beberapa logika berbeda dan mencari cara untuk mendapatkan keadaan saat ini ke keadaan sebenarnya, jika berbeda.
Saya ingin menguji fungsi itu menggunakan pytest
. Ada banyak kemungkinan skenario, tetapi logika pengujiannya cukup sederhana dan bermuara pada (kode python semu):
def test_diffing(current_state, prescribed_state):
properties_to_add = []
properties_to_delete = []
properties_to_modify = []
properties_to_add, properties_to_delete, properties_to_modify = diff_logic(current_state, prescribed_state)
assert properties_to_add == 1
assert properties_to_delete == 0
assert properties_to_modify == 3
Angka-angka di sisi kanan pernyataan bergantung pada current_state
itu. Saya punya banyak current_state
skenario.
Apa cara terbaik untuk menulis pengujian unit tunggal seperti di atas, dengan banyak pasang perlengkapan sehingga kondisi_saat ini diteruskan bersama dengan nilai yang diharapkan dari pernyataan tersebut?
Saya telah melihat parameterisasi perlengkapan pytest tetapi masalah dengan pendekatan ini adalah pendekatan ini menggunakan dekorator dan menjadi jelek* dengan sangat cepat, terutama dengan sejumlah besar argumen dan sejumlah besar kasus uji. Tampaknya bukan ini yang seharusnya saya gunakan untuk perlengkapan.
Apa cara terbaik untuk mencapai apa yang saya coba lakukan dengan bersih?
*Menurut saya ini menjadi jelek karena memiliki 15 atau 20 rangkaian argumen kepada seorang dekorator sangat membingungkan dan menempatkan banyak logika pada dekorator itu sendiri.