Avtomatlashtirilgan testlarni yozish

Edsger W. Dijkstra o'zining 1972 yildagi "Kamtar dasturchi(The Humble Programmer,)" inshosida "Dasturni sinovdan o'tkazish xatolar(buglar) mavjudligini ko'rsatishning juda samarali usuli bo'lishi mumkin, ammo bu ularning yo'qligini ko'rsatish uchun umidsiz darajada yetarli emas" dedi. Bu biz imkon qadar ko'proq sinab ko'rmasligimiz kerak degani emas!

Bizning dasturlarimizdagi to'g'rilik bizning kodimiz biz rejalashtirgan narsani qanchalik darajada bajarashi. Rust dasturlarning to'g'riligi haqida yuqori darajadagi e'tibor bilan yaratilgan, ammo to'g'riligi murakkab va isbotlash oson emas. Rust turidagi tizim bu yukning katta qismini o'z zimmasiga oladi, ammo turdagi tizim hamma narsani ushlay olmaydi. Shunday qilib, Rust avtomatlashtirilgan dasturiy ta'minot testlarini yozishni qo'llab-quvvatlaydi.

Aytaylik, ikkita_qoshish funksiyasini yozamiz, unga qaysi raqam uzatilsa, unga 2 qo'shiladi. Ushbu funksiya signaturesi integer(butun) sonni parametr sifatida qabul qiladi va natijada butun sonni qaytaradi. Biz ushbu funksiyani amalga oshirganimizda va kompilyatsiya qilganimizda, Rust, masalan, String qiymatini yoki ushbu funksiyaga noto'g'ri referenceni o'tkazmasligimizga ishonch hosil qilish uchun siz hozirgacha o'rgangan barcha turdagi tekshiruvlarni va borrowlarni tekshirishni amalga oshiradi. Ammo Rust bu funksiya biz ko'zlagan narsani aniq bajarishini tekshira olmaydi, ya'ni, masalan, parametr plus 10 yoki minus 50 emas, balki plus 2 parametrini qaytaradi! Bu yerda testlar kiradi.

Biz, masalan, ikkita_qoshish funksiyasiga 3 o'tganimizda, qaytarilgan qiymat 5 bo`lishini tasdiqlovchi testlarni yozishimiz mumkin. Mavjud har qanday to'g'ri xatti-harakat o'zgarmaganligiga ishonch hosil qilish uchun kodimizga o'zgartirish kiritganimizda biz ushbu testlarni bajarishimiz mumkin.

Sinov - bu murakkab mahorat: biz bu bobda yaxshi testlarni qanday yozish haqida har bir tafsilotni yorita olmasak-da, Rustning sinov qurilmalari mexanikasini muhokama qilamiz. Testlarni yozishda sizga mavjud bo'lgan izohlar(annotation) va makroslar, standart xatti-harakatlar va testlarni bajarish uchun taqdim etilgan variantlar, shuningdek, testlarni unit testlari va integratsiya testlariga qanday tashkil qilish haqida gaplashamiz.