문제

에서 최근의 질문에 설명을 추가하고,많은 대답이 제안 C#인터페이스 또는 대리인을 구현하기 위한 명세서를,그러 하나 답변 제안을 사용하여 조건부 컴파일을 유지 정적 바인딩에서 생산 코드입니다.이 대답했 modded-2 에서의 시간을 읽다,그래서 최소한 2 사람들은 정말 생각이 잘못된 대답합니다.아마 잘못 사용 디버그는 이유였고,또는 아마의 사용은 고정 값을 대신 더 광범위한 유효성 검사를 수행합니다.하지만 내가 도울 수 있는지 궁금:

의 사용 조건 컴파일한 부적절한 기술을 구현하기 위한 단위 테스트 스텁?때로는?나요?

감사합니다.

편집 add: 나는 다음과 같은 추가 예를 들어로하지만 실험:

class Foo {
    public Foo() { .. }
    private DateTime Now { 
      get {
#if UNITTEST_Foo
        return Stub_DateTime.Now;
#else
        return DateTime.Now;
#endif
      }
    }
    // .. rest of Foo members
}

interface IDateTimeStrategy { 
    DateTime Now { get; }
}
class ProductionDateTimeStrategy : IDateTimeStrategy {
  public DateTime Now { get { return DateTime.Now; } }
}
class Foo {
    public Foo() : Foo(new ProductionDateTimeStrategy()) {}
    public Foo(IDateTimeStrategy s) { datetimeStrategy = s; .. }
    private IDateTime_Strategy datetimeStrategy;
    private DateTime Now { get { return datetimeStrategy.Now; } }
}

할 수있는 보내는 종속에"날짜/시간입니다."지금 할 스텁 C#인터페이스입니다.그러나 우리는 지금 추가하는 동적 배송 요청는 정적이면 충분하고,개체가 더 큰 심지어 생산 버전,그리고 우리는 새로운 실패한 경로에 대한 Foo 의 생성자(allocation 실패 할 수 있습니다).

나는 걱정에 대해 아무것도까요?감사에 대한 피드백까지!

도움이 되었습니까?

해결책

을 유지하려고 생산 코드에서 별도 테스트 코드입니다.유지 다른 폴더에 계층..다른 솔루션/프로젝트입니다.

..당신의 세계에서 기존 C++코드입니다.여기에 아무것도습니다.는 경우에는 조건부 블록 도움 당신은 몇 가지의 코드를 검사할 수 있고 당신이 표시됩니다.모든 수단에 의해 수행습니다.그러나 시험하지 않은 그것을 얻는 메시보다 초기 상태입니다.명확하게 코멘트를 구분 조건 블록입니다.주의해야 합니다.그것은 유효한 기술을 얻기 위해 레거시 코드는 아래에서 테스트를 활용입니다.

다른 팁

나는 그것을 줄이고 명확성을 위해 사람들이 검토합니다.당신은 말을 기억이 있다는 조건부 태그의 특정 코드를 상황을 이해합니다.

아이가 끔찍하다.그것이 누출을 테스트 프로덕션 코드(있는 경우에도 그컨 off)

나쁜 나쁜.

테스트 코드는 명백해야 하는지 간에 혼합 같은 블록으로 테스트 코드입니다.

이것은 거의 동일한 이유로 당신은 쓸 수 없습니다

if (globals.isTest)

나는 생각의 또 다른 이유는 이 끔찍:

많은 시간을 당신은 조롱/스텁가,당신은 그것의 방법을 따라 다른 결과를 반환에 당신이 무엇을 테스트합니다.이 중 하나는 제외한 것이나 그것이 어색으로 모든 도대체.

그것은 유용할 수 있는 도구로 기대에서 당신이 리팩터링을 테스트 용이성에 큰 기본 코드.내가 볼 수 있는 방법을 사용할 수 있는 이러한 기술을 사용하는 작은 변화를 피하"빅뱅"refactoring.그러나 나는 것에 대해 걱정하 기대에 너무 단단한 기법과는 것을 보장하기 위해 시도하는 등의 묘지에서 너무 오래 기본 코드 그렇지 않으면 당신은 위험 응용 프로그램 코드를 매우 복잡하고 어렵다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top