나는 최근에 TDD 과정을 밟아 왔고, 학습을 실천하려고 노력해 왔습니다. 일부 json 문서를 처리하기 위해 코드 작업을 수행했으며, 약간의 처리를 수행하는 함수가 포함 된 다음 다른 함수를 호출하여 작업의 일부를 수행합니다.파이썬에서의 TDD : 함수에 대한 의존성 주입
그래서 클래스 내에서 함수 1은 함수 2를 호출하고 함수 3을 호출합니다. 함수 2를 모의하기 위해 의존성 주입을 사용했습니다. 그래서 함수 2가 함수 1에 의해 호출 된 방법에 대한 어설 션을 만들 수 있습니다 이것은 모의 함수를 함수 1에 대한 매개 변수로 전달하는 것을 포함하는데, 이는 함수를 독립적으로 개발할 때 잘 동작합니다. 그러나, 내가 독립적으로 테스트 한 모든 함수를 실제 문자열과 문자열로 함께 실행하려면 함께 문제가 발생합니다. 내 실제 함수를 전달하려고 할 때 작동하지 않는 것 같습니다. 아래 코드는 작동하지 않지만, 내가하려고하는 것을 잘 나타내줍니다.
class myclass:
def function1(self, number):
number = number + 1
self.function2(number)
def function2(self, number):
number = number + 2
print(number)
instantiated_class = myclass()
instantiated_class.function1(1)
을하지만 분명히 그것은 더 어려워 기능이 호출 된 방식을 테스트 할 수 있습니다 :
class myclass:
def function1(self, number, injected_function=function2):
number = number + 1
injected_function(number)
def function2(self, number):
number = number + 2
print(number)
instantiated_class = myclass()
instantiated_class.function1(1)
일반적으로, 나는 같은 것을 할 것입니다. 나는 unittest.mock.patch
이이 시나리오에서 사용될 수 있다는 것을 알고 있지만 실제로이 모든 것에 대한 해결책입니까? 나는 근본적으로 잘못된 것을하고있는 것처럼 느껴진다. 나는이 TDD 것들로 잘못된 접근법을 가지고있다.
어떻게 작동하지 않습니까? 오류 출력이 있습니까? – MrJLP
@MrJLP 첫 번째 블록에서 코드를 실행하면 오류 유형이 표시됩니다. 나는 내가하고 싶은 것을 습득하기 위해 잘못된 유형의 디자인을 사용하고있다. 테스트 중에 모의 함수를 삽입하는 옵션이있다. 그렇지 않으면 디폴트 함수를 사용한다. – millsy