如何在 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...