와 결합 테스트 가능한 코드를 설계합니다. 그러나 클래스 자체 내에는 TextFieldParser가 검사 할 줄을 반환하는 것에 의존하는 논리가 있습니다.어떻게 같이 상상 클래스를 비 검증 기능
인터페이스가없는 Microsoft의 외부 클래스이기 때문에 논리를 테스트하기 위해 TextFieldParser를 모의 객체로 "인터페이스 아웃"할 수 없습니다.
내가 밀어 수있는이 같은 별도의 기능에 문 경우 :
public bool HasSingleQuote(string lineToCheck)
{
return lineToCheck.Contains("'");
}
그러나 이러한 클래스 외부에서 접근 할 필요가 없습니다. 그들은 다른 곳에서 실제로 부름을받을 필요가 없으므로 도우미 클래스에 속하지 않습니다. 따라서 좋은 설계 원칙에 따라 공개되지 않은 비공개가 될 수 있으므로 공공 접근을 통해 테스트해야합니다. 이 경우 테스트 할 수없는 TextFieldParser에 의존합니다.
내 자신의 클래스에 TextFieldParser를 래핑하고 스틱 및 인터페이스 할 수 있지만 과도한 코드 및 불필요한 코드 복제가 발생합니다.
정말 감사할만한 간단한 예제이지만이 샘플을 함께 사용하여 문제를 설명했습니다. 논리를 테스트 할 수 있도록이 코드를 리팩터링하는 최선의 방법은 무엇입니까?
나는 당신이 소유하고있는 것을 테스트한다고 말할 것입니다. 'TextFieldParser'는 구현 세부 사항입니다. MS는 릴리스 용 기능을 광범위하게 테스트했을 것입니다. 관심사가 조건부 검사를 수행하는 구현 내부의 논리에 관한 것이라면 IFileParser 구현이 너무 많은 작업을 수행하고 있다고 주장 할 수 있습니다. SRP를 생각 나게하고 변경해야 할 한 가지 이유 만 있습니다. – Nkosi
부수적으로, 레거시 코드로 효과적으로 작업하는 것은 환상적인 책입니다. http://www.informit.com/store/working-effectively-with-legacy-code-9780131177055 14 장과 15 장은 확실히 여기에 적용될 것입니다. –