2016-09-02 3 views
2

나는 현재 같은 코드가 두 번째로 반환 : 내가 기대하는 응답을 얻을이 모의 HTTP 클라이언트를 사용하여,MOQ HttpClient를 빈 문자열을

var fieldBoundary = Properties.Resources.TestFieldBoundary; 

httpClient.Setup(
    x => 
     x.GetAsync(It.Is<Uri>(url => url.AbsoluteUri == APIUrl.AbsoluteUri + <my url>))) 
    .Returns(
     Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK) 
     { 
      Content = new StringContent(Encoding.Default.GetString(fieldBoundary)) 
     })); 

를 통해 처음. 그러나 동일한 모의 객체를 사용하여 동일한 URL을 두 번째 호출 할 때 성공적인 응답을 얻지 만 응답은 빈 문자열 또는 길이가 0 바이트 인 배열입니다. 이것이 어떻게 다르게 Moq'd 일 수 있던지 아이디어?

답변

2

대신 Returms을 변경하여 함수를 사용하십시오.

httpClient 
    .Setup(x => x.GetAsync(It.Is<Uri>(url => url.AbsoluteUri == APIUrl.AbsoluteUri + <my url>))) 
    .Returns(() => Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK) { 
      Content = new StringContent(Encoding.Default.GetString(fieldBoundary)) 
     }) 
    ); 

반복 된 호출에서 동일한 인스턴스를 반환하는 대신 조롱 된 메서드를 호출 할 때마다 함수가 호출됩니다. 그래서 두 번째로 문자열 콘텐츠 스트림 포인터가 이미 끝났을 때 호출을 한 것입니다.