如何解决如何在 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 举报,一经查实,本站将立刻删除。