Aqraluvchi sifatida statik usullar

Agar siz MyClass deb ataladigan jamoat usullari to'plamiga ega bo'lsangiz; MethodA, MethodB va MethodC. Dasturning ayrim joylarida MyClass-dan bitta usul kerak, masalan:

MyClass myClass = new MyClass();
myClass.MethodA();

Yuqoridagilarni soddalashtirish uchun men yuqorida ko'rsatilgan kodlarni saralaydigan yagona statik usulni yaratmoqchiman. Men "MethodA" ga qarshi birlik testlarini yozishni rejalashtirmoqdamiz. Mening o'lchovimdagi metodda men soxta ramkalar yordamida amalga oshiriladigan interfeys bilan muloqot qilmoqdaman (bu menimcha "Control Inversion").

MethodAni statik usulda (sarg'ish usuli) bilvosita sinab ko'rishni sinab ko'rish mumkin. MethodA'da ishlatiladigan interfeysning amalda tatbiq etilishi ham sinovdan o'tgan deb taxmin qilyapman.

Yoki statik usulni qo'llamasligim kerakmi?

1

2 javoblar

Iltimos, buni qilmang!

O'zingiz xohlagan statik usullar nazorat qilish/qo'shilishni in'ektsiya qilishning teskarisiga mutlaqo ziddir va shuning uchun yomon amaliyotdir. Siz nima qilishni xohlasangiz, barcha kodlarni MyClass interfeysiga (yoki konstruktor yoki setter orqali qo'lda yoki bahor kabi IoC formatini qo'llash) talab qiladigan barcha sinflarga AOK qilish.

Agar siz boshqa kodlardan chaqiradigan statik usulda kodlar satrini bog'lasangiz, unda MyClass ning maxsus dasturini juda siqib qo'yasiz, bu siz erishmoqchi bo'lgan narsaning zididir.

Lekin sizning aniqroq savolingizga javob berish uchun hech qachon kodi boshqa sinov orqali sinovdan o'tishi kerak, deb hisoblash mumkin. Men nimani nazarda tutmoqchiman: agar statik usuldan o'tadigan test yo'q bo'lsa, unda u qamrab olinmaydi. Agar siz buni ahamiyatsiz deb hisoblasangiz ham, uni keyinchalik qayta ishlating va hech qanday sinov uning buzilganligini ko'rsatmasligini unutmang.

0
qo'shib qo'ydi

Yo'q, sarg'ish usuli sinovdan o'tganini tasavvur qilish xavfsiz emas. Hujayra usulida kod mavjud va bu kodning buzilishi bo'lishi mumkin, shuning uchun siz ushbu kodga qarshi birlik testlarini yozishingiz kerak bo'ladi.

0
qo'shib qo'ydi