문제

조롱하는 밀봉된 클래스 수니다.현재 선 어댑터 패턴 이 처리하는지에 대해 뭔가지 이상한 느낌.

그래서 가장 좋은 방법은 무엇입을 모의 밀봉하십니까?

Java 답변을 보다 더 환영.사실,저는 것으로 예상 Java 지역 사회가 다루는 이상하고 있는 좋은 거래를 제공합니다.

하지만 몇몇은 여기 있습니다.순 의견:

도움이 되었습니까?

해결책

나의 일반 규칙은 그 개체할 필요가 있는 모의해야한 공통 인터페이스 너무입니다.내 생각에 이것은 바로 디자인하고 테스트를 많이 쉽게(그리고 일반적으로 무엇을 얻을 할 경우 TDD).에 대해 더 많이 읽을 수 있습니다 구글에서 테스트 블로그 최근 글 (지점을 참조하십시오 9).

또한,작업을했습니다 주로 자바에서는 지난 4 년 내가 말할 수 있는 내가 하는 횟수를 만들었 최종(봉인)클래스입니다.다른 규칙을 여기서 나는 항상 있어야 좋은 이유를 밀봉하는 클래스,반대로 바다표범 어업 그것은 기본적으로 합니다.

다른 팁

습니다.NET 사용할 수 있습니다 같은 뭔가 TypeMock, 을 사용하는 API 프로파일링할 수 있습 훅으로 통화를하는 거의 아무것도.

내가 믿고 , 에서,Microsoft,연구를 수행할 수 있습니다.에서 몰 페이지:

몰 사용할 수 있습을 우회니다.NET 방법 포함하여 비상/정적 법에서 밀봉된 형식입니다.

업데이트: 새로운 라는 프레임워크"가짜에서"곧 대 11 릴리스도록 설계하여 대체 몰:

가짜는 프레임워크 Visual Studio11 다음 세대의 몰&스텁,그리고 결국 그것을 대체합니다.가짜는 서로 다른 몰에서,그러나,그렇게 움직이 몰에서 가짜이 필요한 일부 수정하여 귀하의 코드입니다.이를 마이그레이션에 사용할 수 있습니다.

요구사항:Visual Studio11Ultimate.NET4.5

문제 TypeMock 은 변명이 나쁜 디자인이다.지금,나는 그것은 종종 다른 사람의 나쁜 디자인하는 이 숨어 있지만 허용으로 개발 프로세스 이끌 수 있는 아주 쉽게 허용하는 당신의 자신의 나쁜 디자인이 있다.

내가 생각하는 경우에 당신을 사용하여 조롱하는 framework 를 사용해야 하는 전통적인 중 하나(다음과 같 Moq)들을 격리 층의 주위에 unmockable 것,그리고 모의 절연층을 대신 합니다.

나는 거의 항상 피에 종속된 외부 클래스에서 깊은 나의 코드입니다.대신에,내가 많은 오히려 사용 adapter/다리 이야기하는 것이다.는 방법으로,나를 다루는 내 의미,그리고 고통의 번역은 고립 된에서 하나의 클래스가 있습니다.

그것은 또한 쉽게 전환하는 나의 종속성습니다.

이 문제는 최근에 읽은 후에/웹 검색을 것처럼 쉬운 방법은 없 주위를 제외하고 다른 도구를 사용하으로 위에서 언급된다.또는 원유의 취급을 것 같았다:

  • 인스턴스를 만들의 봉급없이 생성자를 호출됩니다.
  • 시스템입니다.런타임입니다.Serialization.FormatterServices.GetUninitializedObject(인스턴스 유형);

  • 값을 할당하여 귀하의 속성/을 통해 필드 반사

  • YourObject.GetType().GetProperty("속성").SetValue(dto,두 문자,null);
  • YourObject.GetType().GetField("필드").SetValue(dto,두 문자);

나는 일반적으로 길을 만드 인터페이스 및 어댑터/는 프록시 등을 촉진하는 조롱의 유형을 밀봉했습니다.그러나,또한 실험으로 건너뛰기의 생성 인터페이스와 프록시 유형을 비 밀봉된 가상의 방법이 있습니다.이 일이 잘 될 때는 프록시가 정말 자연의 기본 클래스는 캡슐화하고 사용자는 부분의 밀봉된 클래스입니다.

을 처리할 때 코드하는 데 필요한이 적응,내가 싫증이 수행하는 동일한 작업을 만들어 인터페이스와 프록시 유형을 그래서 내가 구현 라이브러리를 자동화하는 작업입니다.

이 코드는 다소 보다 더 정교한 샘플 주어진 문서에 참조로 생산하는 어셈블리(대신 소스 코드)수 코드를 위한 세대에서 수행하도록 어떤 유형을 필요로 하지 않으로 많은 구성이 있습니다.

자세한 내용을 참조하십시오 이 페이지.

그것은 완벽하게 적당하는 모의 밀봉된 등 많기 때문에 프레임워크 클래스는 밀봉된다.

나의 케이스에서 나가려고 mock.Net 의하는 데 사용되는 프록시 등록할 수 있습 TDD 내 우아한 예외 처리는 논리입니다.

하는 경우 이에 대한 아이디어를 어떻게 극복하기 위해 Moq 의 오류에 대한"잘못된 설정에서는 비 재정의 가능한 회원이",알려주시기 바랍니다.

코드:

    [TestMethod]
    public void Test()
    {
        Queue<Message> messages = new Queue<Message>();
        Action<Message> sendDelegate = msg => messages.Enqueue(msg);
        Func<TimeSpan, MessageQueueTransaction, Message> receiveDelegate =
            (v1, v2) =>
            {
                throw new Exception("Test Exception to simulate a failed queue read.");
            };

        MessageQueue mockQueue = QueueMonitorHelper.MockQueue(sendDelegate, receiveDelegate).Object;
    }
    public static Mock<MessageQueue> MockQueue
                (Action<Message> sendDelegate, Func<TimeSpan, MessageQueueTransaction, Message> receiveDelegate)
    {
        Mock<MessageQueue> mockQueue = new Mock<MessageQueue>(MockBehavior.Strict);

        Expression<Action<MessageQueue>> sendMock = (msmq) => msmq.Send(It.IsAny<Message>()); //message => messages.Enqueue(message);
        mockQueue.Setup(sendMock).Callback<Message>(sendDelegate);

        Expression<Func<MessageQueue, Message>> receiveMock = (msmq) => msmq.Receive(It.IsAny<TimeSpan>(), It.IsAny<MessageQueueTransaction>());
        mockQueue.Setup(receiveMock).Returns<TimeSpan, MessageQueueTransaction>(receiveDelegate);

        return mockQueue;
    }

지만 현재 베타 버전 출시,내 생각에 그 가치가 마음에 유지 shim 기능의 새로운 가짜 framework (부분의 Visual Studio11 베타 버전).

심 유형을 제공하는 메커니즘을 우회니다.NET 방법을 사용자 정의할 수 있습니다.심 유형은 코드를 생성해서 가짜기 발전기,그리고 그들은 사용하는 대표리 shim 형식을 지정하는 새로운 방법을 실현하였다.후드,shim 형식을 사용하여 콜백했던 주입한 런타임 방법에서 MSIL 체.

개인적으로 찾고 있었을 사용하여 이 조롱하는 방법들을 통해서 인봉되는 프레임워크 클래스와 같은 DrawingContext.

는 방법이 있을 구현하는 밀봉된 등 인터페이스에서...고 모의 인터페이스를 대신?

에 뭔가가 나에게 느끼는 갖는 밀봉된 클래스는 잘못된 첫 번째 장소에서,but that's just me:)

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