예를 들어, 우리는 ShipmentInformationModelFactory를 가지고 있습니다. 모델을 채우고 그것을 반환하는 것이 목적입니다.TDD - 팩토리 논리의 구체적인 버전을 어떻게 구체적으로 구현할 수 있습니까?
internal class ShipmentInformationModelFactory
{
private IGetCarrierServiceFactory getCarrierServiceFactory;
public ShipmentInformationModelFactory(IGetCarrierServiceFactory getCarrierServiceFactory)
{
this.getCarrierServiceFactory = getCarrierServiceFactory;
}
internal ShipmentInformation Create(ICarrierTransaction carrierTransaction, CarrierPackage carrierPackage)
{
ShipmentInformation shipmentInformation = new ShipmentInformation();
// Get the Carrier Service Model for the ID of the carrier service against the Package.
ICarrierServiceModel carrierServiceModel = this.getCarrierServiceFactory.Get(carrierPackage.CarrierServiceId);
shipmentInformation.ServiceCode = carrierServiceModel.Code;
return shipmentInformation;
}
}
다음으로 일부 스텁 데이터를 반환하는 MockGetCarrierServiceFactory가 있습니다.
[TestMethod]
public void CreateShipmentInformation_ShipmentData()
{
ShipmentInformationModelFactory shipmentInformationModelFactory = new ShipmentInformationModelFactory(new MockGetCarrierServiceFactory());
ShipmentInformation shipmentInformation = shipmentInformationModelFactory.Create();
}
internal class MockGetCarrierServiceFactory : IGetCarrierServiceFactory
{
public ICarrierServiceModel Get(int carrierServiceModelID)
{
ICarrierServiceModel carrierServiceModel = Mock.Create<ICarrierServiceModel>();
Mock.Arrange(() => carrierServiceModel.Code).Returns("TestCarrier");
Mock.Arrange(() => carrierServiceModel.Description).Returns("TestDescription");
return carrierServiceModel;
}
}
멋진 작품이며 솔리드 원리를 잘 따르고 있다고 느낍니다. 틀렸다면 언제든지 저를 고쳐주십시오.
내 문제는이 구현의 (실제) 구체적인 버전과 함께 제공됩니다. 어떤 시점에서 GetCarrierServiceFactory의 구체적인 버전을 ShipmentInformationModelFactory로 전달해야합니까?
기본 생성자를 생성하고 거기에 자동으로 채워지는 경로를 내려야합니까?
ShipmentInformationModelFactory 객체를 인스턴스화하는 클래스는 생성자에게 전달되면 전달할 수 있지만 방금 여기에 종속성을 만들었습니다.
TDD와 솔리드 원칙을 80 % 이해하고있는 것처럼 느껴지지만 이러한 공장을 만들면 길을 잃어 가고 있습니다.
흥미 롭다면, 이전에는 IoC 컨테이너에 대해 들어 본 적이 없었습니다. 이 문제를 해결하는 가장 일반적인 방법은 IoC를 통하는 것입니까? – Eritey