>source

나는 모의 HttpClient를하고 있으므로 단위를 테스트 할 수 있습니다. 게시중인 콘텐츠를 확인하고 싶습니다.

이 작업을 수행했습니다.

MockHttpMessageHandler=  new Mock<FakeHttpMessageHandler>() { CallBase= true };
HttpClient= new HttpClient(MockHttpMessageHandler.Object, false);

MockHttpMessageHandler.Setup(c=> c.Send(It.IsAny<HttpRequestMessage>())).Returns(new HttpResponseMessage
            {
                StatusCode= HttpStatusCode.OK,
            });

MockHttpMessageHandler.Verify(c=> c.Send(It.Is<HttpRequestMessage>(
                m=> m.Content.Headers.ContentType.MediaType== "text/xml" &amp;
&amp;
                    m.Method== HttpMethod.Post &amp;
&amp;
                    m.RequestUri.ToString()== "http://www.test.com/" &amp;
&amp;
                    m.Content.ReadAsStringAsync().Result== "TestContent")));

이를 제외하고는 잘 작동합니다함유량선. 콘텐츠가 처분되었음을 알리는 오류가 발생합니다.

나는 그것이 스트림이기 때문입니다.

콘텐츠를 테스트 할 수있는 우아한 방법이 있습니까? 문제를 인코딩하는 데 사용할 수 있기 때문에 콘텐츠에 직접 액세스하는 것이 좋습니다.

편집 :

HTTPClient는 다음과 같은 클래스에 주입 된 종속성입니다.

public class MyHttpSenderClass
{
    HttpClient _httpClient; //DI populates this
    //...
    public async Task<HttpResponseMessage> ComposeAndsendHttpRequestMessage(string url, string payload, string mediaType, string method)
    {    var httpRequestMessage= new HttpRequestMessage(method, new Uri(url));
        httpRequestMessage.Content= new StringContent(payload);
        httpRequestMessage.Content.Headers.ContentType= new MediaTypeHeaderValue(mediaType);
        using (_httpClient)
        {
            //I want to test this httpRequestMessage is correct
            var responseMessage= await _httpClient.SendAsync(httpRequestMessage);
            return responseMessage;
        }
    }
}

예외는 설명을위한 설명 :

System.ObjectDisposedException : 처분 된 객체에 액세스 할 수 없습니다. 객체 이름 : 'system.net.http.StringContent'.

이것은m.Content.ReadasStringAsync (). 결과부품은 콘텐츠가 배치되어 있기 때문입니다.

통과 된 요청 메시지를 캡처하려면 콜백을 사용하십시오. 거기에서 필요에 따라 검사하고 주장 할 수 있습니다.

Nkosi2021-04-13 13:21:37

테스트중인 주제에 대해 더 많은 맥락을 제공 할 수 있습니까?

Nkosi2021-04-13 13:21:37

그래 맞아. 클라이언트가 배치 될 때 요청 메시지가 가장 많이 폐기 될 가능성이 큽니다. 주목자는 피험자가 처분 된 후에도 분명히 호출 될 것입니다.

Nkosi2021-04-13 13:21:37

@nibblypig 당신은 여기서 무엇을하려고 노력하고 있습니까? 이 code는 핸들러가 아닌 조롱 프레임 워크 자체를 확인하는 것입니다. 문제는 매번 새로운 것을 만드는 대신 동일한 응답을 사용하려고 노력하는 것입니다. 그때조차도, 어떤 콘텐츠 또는 헤더가 검증 할 것이 없으며, 빈 응답 객체 만

Panagiotis Kanavos2021-04-13 13:21:37

나는 이것이 xy 문제일지도 모른다고 의심한다

Nkosi2021-04-13 13:21:37
  • 이전 export : 내 보낸 SSRS 보고서의 파일 이름을 변경하는 방법
  • 다음 SharePoint 2010 리치 텍스트 필드 목록보기에서 HTML 태그를 보여주는