हम कई एल्गोरिदम लागू कर रहे हैं, जिनमें आम तौर पर बहुत सारे साझा, सार्वजनिक रूप से ज्ञात और सुरक्षा-प्रासंगिक पैरामीटर हैं।
वर्तमान में, हम बस सभी मापदंडों और दो पूर्वनिर्धारित वैश्विक वस्तुओं को धारण करने वाले एक वर्ग का उपयोग करते हैं:
class PublicParams(object):
p = q = 0
def __init__(self, p, q):
self.p = p
self.q = q
# used for tests
publicParams_test = PublicParams(15,7)
# Some 2048 bit numbers for example
publicParams_secure = PublicParams(128378947298374928374,128378947298374928374)
एल्गोरिदम तब PublicParams
एक तर्क के रूप में एक वस्तु लेता है जो उत्पादक के लिए चूक करता हैpublicParams_secure
def AlgoOne(n, publicParams = publicParams_secure):
# do stuff with publicParams.p
# ...
AlgoTwo(x, publicParams)
तथा
def AlgoTwo(x, publicParams= publicParams_secure):
# do stuff with publicParams.q
इस तरह हम अभी भी आसान इकाई परीक्षण के लिए विभिन्न सार्वजनिक मापदंडों को इंजेक्ट कर सकते हैं:
class AlgoOneTest(unittest.TestCase):
def test(self):
# compare with manually computed result
self.assertTrue(AlgoOne(1, publicParams_test) == 10)
मुझे इस दृष्टिकोण के बारे में क्या पसंद नहीं है:
publicParams
कुछ एल्गोरिथ्म को कॉल करते समय डिफ़ॉल्ट मान देना वैकल्पिक बनाता है। हालाँकि, जब इसेAlgoTwo
भीतर से कॉल किया जाता है, तो इसे भूलना आसान हो जाता हैAlgoOne
, जिसके परिणामस्वरूप यदि परीक्षण ऑब्जेक्ट को पारित किया गया था, तो दो अलग-अलग वस्तुओं का उपयोग किया जाएगा।AlgoOne
वहाँ एक बेहतर तरीका है जो कम प्रवण है लेकिन फिर भी यूनिट परीक्षण के लिए लचीलापन प्रदान करता है? क्या यह वास्तव में सबसे अच्छा अभ्यास है?