IReader 인터페이스, IReader 인터페이스 ReaderImplementation의 구현 및 리더에서 데이터를 소비하고 처리하는 클래스 ReaderConsumer를 가정합니다.
public interface IReader
{
object Read()
}
이행
public class ReaderImplementation
{
...
public object Read()
{
...
}
}
소비자:
public class ReaderConsumer()
{
public string location
// constructor
public ReaderConsumer()
{
...
}
// read some data
public object ReadData()
{
IReader reader = new ReaderImplementation(this.location)
data = reader.Read()
...
return processedData
}
}
ReaderConsumer 및 처리를 테스트하기 위해 IReader를 사용합니다. 따라서 ReaderConsumer는 다음과 같이됩니다.
public class ReaderConsumer()
{
private IReader reader = null
public string location
// constructor
public ReaderConsumer()
{
...
}
// mock constructor
public ReaderConsumer(IReader reader)
{
this.reader = reader
}
// read some data
public object ReadData()
{
try
{
if(this.reader == null)
{
this.reader = new ReaderImplementation(this.location)
}
data = reader.Read()
...
return processedData
}
finally
{
this.reader = null
}
}
}
이 솔루션에서는 조롱 생성자 만 인터페이스 인스턴스를 제공하므로 조롱은 프로덕션 코드에 대한 if 문장을 소개합니다.
작성하는 동안 try-finally 블록은 응용 프로그램 런타임 동안 위치를 변경하는 사용자를 처리하기 때문에 다소 관련이 없음을 알고 있습니다.
전반적으로 냄새가납니다. 어떻게 더 잘 처리 할 수 있습니까?
ReaderConsumer
독립적으로 만드는 것이 문제가ReaderImplementation
아닌가?