Tizimni sinash uchun yon ta'sirlarni izolyatsiya qilish

Nojo'ya ta'sirlarni olish - bu tekshiriladigan kodni yaratishning eng yaxshi usullaridan biri

Ikkala erkak jangchi o'rtasidagi boks matchining surati. Yuzlari ramkadan tashqarida. Chapdagi qiruvchi chap kancani o'ngdagi qiruvchi tomonga yubordi. O'ng tomonda qiruvchi Sovet Ittifoqining kichkina belgisi bo'lgan qizil kalta kiygan.

Nock - JavaScript-da yozilgan mashhur tarmoq. Bu testlar uchun statik javobni qaytaradi, shunda ular HTTP serveri mavjud bo'lmasa ham ishlay oladilar.

Biroq, bu ham hid.

Ma'lumotlar manbai va sinov ostidagi tizim o'rtasidagi bog'liqlik, kodni qayta ishlashga va xizmat ko'rsatishga ta'sir qilishi mumkin bo'lgan xarajatdir.

Mana nima uchun.

Aytaylik, postlar ro'yxatini qaytaradigan server va post sarlavhalari ro'yxatini yaratish uchun serverdan javobni ishlatadigan funktsiya mavjud. Serverning javobini to'xtatish uchun funktsiya uchun test Nock-dan foydalanadi:

Chapdagi blokda

Kodek munosib qamrovga ega. Biroq, u bilan bog'liq ba'zi muammolar mavjud.

Agar siz javobning tarkibiy turiga o'zgartirish kiritsangiz, testlarni o'zgartirishingiz kerak, hatto kodning harakati bir xil bo'lib qolsa ham:

Agar siz URL, sarlavhalar yoki Nock stubing parametrlariga o'zgartirish kiritsangiz, xuddi shu narsa qo'llaniladi. Tizimning xatti-harakati bir xil bo'lib qolsa ham, testlarni o'zgartirishingiz kerak:

"Xabarlar ro'yxatini yaratish" funktsiyasi - sinov ostidagi tizim (SUT). HTTP qo'ng'irog'idagi ma'lumotlar - bu ma'lumot manbai.

Siz kodni Dizayn manbasida SUT-ga ulanadigan umumiy interfeysga ega bo'lishingiz mumkin. Bunday holda, siz juda ko'p sozlashsiz mantiqni mashq qilishingiz mumkin.

Chapdagi blokda

Sinov muhiti uchun siz "Xotiradagi ma'lumot manbasini" kiritishingiz mumkin. Ishlab chiqarish uchun siz "HTTP Server ma'lumot manbasini" ishlatishingiz mumkin.

Oldingi JSFiddle-dagi "umumiy interfeys" bu "xabarlarning sarlavhasini topish" usuli. Interfeysni qanday yaratganingizdan qat'iy nazar, siz barcha qo'ng'iroq qiluvchilarni nazorat qilishingiz mumkin. Shuning uchun o'zgarishlar juda sodda. Martin Fouller buni "nashr etilmagan interfeys" deb ataydi.

Boshqa tomondan, agar server "Nashr qilingan interfeys" shartnomasini buzsa, aytaylik, sinf atributi post sarlavhasidan maqola sarlavhasiga o'zgaradi, faqat ma'lumot manbasini amalga oshirishni o'zgartirish kerak. Hamma joyda o'zgarishlar qilish kerak emas.

Sinab ko'rish va erta fikr bildirish muhim bo'lgan narsa ma'lumotlarga emas, balki xatti-harakatlarga qarshi testlardir. Shuning uchun, mantiqqa o'zgartirish kiritish uchun zarur bo'lgan harakatlar miqdorini kamaytirish uchun kodni loyihalash juda muhimdir. Bunday holda, mantiq bu kirish manbasini HTML tartiblanmagan ro'yxatiga o'zgartirishdir.

Yangi dizayn yordamida siz tizim ostidagi ma'lumot manbaini ajratib oldingiz. Shuning uchun, siz Nock-ni olib tashlashingiz mumkin.

Yangi dizayn, shuningdek, tizimga nusxa ko'chirish / joylashtirishsiz yangi qoida qo'shish uchun zarur bo'lgan ishlarni qisqartiradi:

Shunday bo'lsa-da, "HTTP Server Ma'lumotlar Manbasi" html-dan "so'rov xabarlari sarlavhasi" xususiy funktsiyasining ba'zi bir tekshirilmagan mantiqiga ega.

Buni sinash uchun siz bir xil naqshni takrorlashingiz mumkin. Yon ta'sirlarni bosing va "get request" mexanizmini "HTTP Server ma'lumot manbasiga" ulanadigan qilib qo'ying. Shu bilan siz kodni Nock dasturisiz sinab ko'rishingiz mumkin:

"Xotiradagi ma'lumotlar manbai" bilan ishlaydigan "xabarlar ro'yxati sarlavhalari" ni tasdiqlash uchun sizda sinovlar mavjudligini hisobga olgan holda, siz ma'lumot manbasini to'g'ri natijani qaytarganligiga ishonch hosil qilish uchun alohida holda sinovdan o'tkazishga qaror qilishingiz mumkin.

Siz yon ta'sirni mantiqdan butunlay chiqarib yubordingiz. Bunday holda, haqiqiy "so'rovni olish" funktsiyasi yon ta'sirdir. Endi siz buni Nock-dan foydalanishingiz mumkin.

Biroq, "olish uchun so'rov" ichidagi mantiq ahamiyatsiz va Nock katta xarajatlarga ega bo'lsa, butun dasturni, shu jumladan yon ta'sirni amalga oshiradigan oz sonli Integratsiya testlarining mavjudligi mantiqiy. Siz jonli serverga ulanishni oldini olish uchun Nock-dan foydalanishingiz mumkin va HTTP so'rovlaridan foydalanib, dastur barcha bo'laklar bir-biriga mos tushganda oqilona javob qaytarishini tekshiring.

Hock HTTP qatlamidagi ulanishni to'xtatish va statik javob berish uchun foydalidir. Biroq, uni tejamkorlik bilan ishlating. Har bir sinov uchun siz muhim ulanish va o'zgartirish narxini oshirasiz.

Agar tejamkorlik bilan foydalanilmasa, Nock Nock Jahannamni yaratishi mumkin.

Siz hal qilmoqchi bo'lgan muammo - bu xatolar sonini va o'zgarish narxini kamaytirish. Agar siz kodning tuzilishini xatti-harakatlarsiz o'zgartirsangiz, testlar buzilmasligi kerak. Agar ular shunday qilishsa, unda siz foydali testlarni yoza olmadingiz.

Sizning maqsadingiz o'zingizning e'tiboringizni mantiqqa mos keladigan testlarni qamrab olish sifatini yaxshilash va erta javob berishga erishish kerak. Bularning barchasi kodni qayta ishlab chiqish qobiliyatingizga ta'sir qilmasdan.

Yon ta'sirlarni ajratib oling va Nock kabi vositalardan foydalanishni cheklang.

Bu sizga o'zgarishlar qilish va narsalarni buzmaslik uchun etarlicha ishonchni berishi kerak.

Jangga qo'shiling, yon ta'sirlarni surib qo'ying va keyin ... uni echib oling.

O'qiganingiz uchun rahmat. Agar sizda biron bir fikringiz bo'lsa, menga Twitter, Facebook yoki Github orqali murojaat qiling.

Eduardo Slompo va Gilerme J. Tramontinaga ushbu lavozimga chuqur mulohazalari uchun rahmat.