微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 FHIR Http 客户端调用 CreateAsync

如何解决如何在 FHIR Http 客户端调用 CreateAsync

在 Hl7.Fhir.Rest.FhirClient 库中实现对 CreateAsync调用时,我正在为如何模拟有效响应而苦苦挣扎。我知道如何使用 Mock HttpMessageHandler 对象来模拟 dotnet-httpclient,并注意到在创建 FhirClient 时可以指定一个消息处理程序参数。我试图做的是为创建步骤指定一个消息处理程序,它是一个模拟消息处理程序对象。

这个简化的单元测试试图模拟 HttpMessageHandler 并使其从 FhirClient 的 CreateAsync 方法调用返回一个有效的主体和结果代码

        [Fact]
        public async Task SubscribeAndReturnSubscriptionIdAsync()
        {
            var mockHttpMessageHandler = MockFhirHttpClientMessageHandler.MockSubscribeMessageResponse(new StringContent("{'id':'abc123','status':'active'}"),HttpStatusCode.Created);
            var subscriptionResource = new Subscription()
            {
                Criteria = "https://server.fire.ly/CareTeam",Status = Subscription.SubscriptionStatus.Active,Reason = "test",Channel = new Subscription.ChannelComponent()
                {
                    Type = Subscription.SubscriptionChannelType.RestHook,Endpoint = "http://localhost:9999/AscomFhirApi/UpdateCareTeam",Payload = "application/fhir+json"
                },};
            var serverUri = new Uri("http://server.fire.ly");
            var clientSettings = new FhirClientSettings()
            {
                PreferredFormat = ResourceFormat.Json
            };

            var fhirHttpClient = new Hl7.Fhir.Rest.FhirClient(serverUri,clientSettings,mockHttpMessageHandler.Object);

            var subscription = await fhirHttpClient.CreateAsync<Subscription>(subscriptionResource);

            Assert.NotEmpty(subscription.Id);
        }

下面显示的 MockSubscribeMessageResponse 方法创建了在上述测试中传递给 FhirClient 的 HttpMessageHandler。

public static Mock<HttpMessageHandler> MockSubscribeMessageResponse(
            HttpContent content,HttpStatusCode code = HttpStatusCode.OK)
        {
            var mockHttpMessageHandler = new Mock<HttpMessageHandler>();
            mockHttpMessageHandler.Protected()
                .Setup<Task<HttpResponseMessage>>("SendAsync",ItExpr.IsAny<HttpRequestMessage>(),ItExpr.IsAny<CancellationToken>())
                .ReturnsAsync(new HttpResponseMessage
                {
                    StatusCode = code,Content = content
                });
            return mockHttpMessageHandler;
        }

我得到的错误一个类似于 HttpResponseMessage 或响应正文的空引用异常。

System.NullReferenceException
Object reference not set to an instance of an object.
   at Hl7.Fhir.Rest.HttpToEntryExtensions.ToEntryResponse(HttpResponseMessage response,Byte[] body)
   at Hl7.Fhir.Rest.HttpClientRequester.ExecuteAsync(EntryRequest interaction)
   at Hl7.Fhir.Rest.BaseFhirClient.executeAsync[TResource](Bundle tx,IEnumerable`1 expect)
   at Tests.Unit.Core.Services.FirelyHttpClientShould.SubscribeAndReturnSubscriptionIdAsync() in C:\src\AscomIASharedAssignFHIRApi5\Tests.Unit.Core\Services\FirelyHttpClientShould.cs:line 60

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。