우리는 일반적으로 많은 공유, 공개 및 보안 관련 매개 변수를 가진 많은 알고리즘을 구현하고 있습니다.
현재는 모든 매개 변수와 두 개의 사전 정의 된 전역 객체를 보유한 클래스를 사용합니다.
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
withinAlgoOne
에서 호출 할 때 전달하는 것을 잊어 버리기 쉬워 져 테스트 오브젝트가 전달 된 경우 두 개의 다른 오브젝트가 사용됩니다.AlgoOne
단위 테스트에 덜 취약하지만 여전히 유연성을 제공하는 더 좋은 방법이 있습니까? 이것이 가장 좋은 방법입니까?