WCF REST 스타터 키트로 구축 된 WCF 클라이언트를 단위 테스트하는 방법

StackOverflow https://stackoverflow.com/questions/823276

  •  05-07-2019
  •  | 
  •  

문제

REST 스타터 키트를 사용하여 Pox 서비스를 만들었습니다. 처음에는 서비스 계층에 대한 장치 테스트를 만드는 것이 약간 복잡했지만 결국에는 잘 설계되었으며 상황을 조롱하고 기대를 설정하는 데 성공했습니다.

그러나 나는 지금 고객 측에서 시작하고 있으며, 물건을 조롱하는 방법을 알아내는 데 문제가 있습니다. 그렇게 간단하지 않습니다.

따라서 Datacontract와 XML을 전송하여 일부 데이터를 HTTP를 통해 게시하는이 샘플 방법이 있습니다.

public class ServiceClient: IService

{
    private const string uri_template = "http://{0}:{1}/SomeService.svc/";
    private readonly HttpClient http = new HttpClient();

    public ServiceClient(string host, int port)
    {
        http.BaseAddress = new Uri(string.Format(uri_template , host, port));
    }

    public void Create(MyDataContract my_data_contract)
    {
        var content = HttpContentExtensions
                        .CreateDataContract(
                          my_data_contract, 
                          Encoding.Default, 
                          "text/xml", 
                          null);
        var response = http.Post("Create", content);
        if (response.StatusCode != HttpStatusCode.Created) {
            throw new Exception("something is not right");
        }
    }
}

이 방법은 작동하고 실제로 데이터를 게시하고 올바르게 직렬화하고 있습니다.

내가하고 싶은 것은 단위 테스트입니다.

내 질문은 다음과 같습니다.

  1. 인터페이스를 구현하지 않는다는 것을 알고 HTTPCONTEXTEXTENSIONS 용 스터브/모의를 어떻게 만들려면?

  2. 그리고 httpclient의 경우? 다른 곳에 정의 된 확장 방법으로 가득 차 있기 때문에 최악입니다 (게시물 및 유사한 방법은 확장자입니다).

2에서 나는 '보내기'를 고수 할 수 있고 과부하가 발생하지만 1에서와 같은 문제입니다.

내가 생각했던 것은 httpcontextextensions 및 httpclient의 인터페이스를 추출하고 각각의 어린이를 만들고 부모에게 위임하는 인터페이스를 구현 한 다음 내 코드의 인터페이스를 사용하는 것입니다.

그러나 그것은 많은 일 IMHO입니다.

나는 Rhinomocks를 조롱 프레임 워크로 사용하고 있으므로 콘크리트 클래스를 조롱/스텁을 할 수 없으며, 콘크리트 클래스를 조롱하는 것이 그다지 우아하지 않다고 생각하기 때문에 그것을 고수하고 싶습니다.

그렇다면 위와 같은 더 깨끗하고 더 빠른/더 똑똑한 방법이 있습니까?

PD : 이것은 WCF 스타터 키트 미리보기 용입니다.

도움이 되었습니까?

해결책

그 코드를 조롱하고 싶다면이 시나리오에서 작동 할 수있는 접근 방식은 ServiceClient 클래스에서 HTTPClient 인스턴스를 수신하는 것입니다. httpclient 클래스에는 사용자 정의 핸들러로 사용자 정의 할 수있는 처리 파이프 라인이 포함되어 있습니다. 테스트의 경우 기본적으로 HTTPClient 인스턴스에 핸들러를 주입하여 마지막 핸들러 (전송 단계)에서 실제 서비스가 호출되기 전에 테스트에 대한 조롱 된 응답을 반환 할 수 있습니다. 이 게시물을 살펴 보려면 이것이 어떻게 구현 될 수 있는지에 대한 아이디어를 얻으십시오.

http://weblogs.asp.net/cibrax/archive/2009/03/18/negotiating-a-saml-token-for-rest-clients-with-httpclient.aspx

안부, 파블로.

다른 팁

나는 대부분의 httpclient 코드를 썼습니다. Pablo의 제안은 내가 단위 테스트에서 한 일입니다.

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