테스트 주도 개발은 의존성 주입을 유도해야하는 설계의 일부입니다. 종종 단위 테스트가 어려운 것을 발견하면 설계를 재고해야하기 때문입니다.
이 경우, 시험 대상은 아마도 SomeObject
을 만드는 데 합리적이어야합니다. 대신 누군가에게 제공되어야합니다. 아마도 테스트하는 클래스가 처음 인스턴스화 될 때 제공되어야 할 것이고 아마도 메소드를 호출 할 때 제공되어야 할 것입니다. 예 :
public class ClassBeingTested
{
public ClassBeingTested(SomeObject so)
{
// Inject class dependency when instantiated the class
}
void MethodIAmTesting(SomeObject so)
{
// Passing things needed for a function to complete its work
}
}
또한 SomeObject의 인터페이스를 만들고 싶을 것입니다. 그런 다음 스텁을 만들어 쉽게 호출 할 수 있는지, 스텁 동작/속성 등을 테스트 할 수 있습니다. 이렇게하면 테스트하는 것이 훨씬 쉬워집니다. 예를 들어, 당신이 _someService
가 SomeObject
이 제공되고 있는지 확인하기 위해 테스트를 작성하는 방법을 살펴 보자 : 그것은
void EnsureSomeObjectPassedToService()
{
// arrange
SomeObject so = new SomeObject()
// act
_mainClass.MethodIAmTesting(so);
// assert
_someObject.AssertWasCalled(x => x.AnotherMethodCall(so));
}
의 그! 일을 제대로 할 때 매우 쉽습니다.