我目前正在為 websocket 連接撰寫集成測驗。我想針對由Microsoft.AspNetCore.Mvc.Testing. 這似乎不起作用。有人知道如何讓它作業嗎?
我的設定如下:
- 我有一個 API 應用程式,它提供了一些普通的 http 端點和一個 websocket
- 我有一些應用程式代碼,它建立了一個 websocket 連接
- 我有集成測驗,它使用 Microsoft.AspNetCore.Mvc.Testing 實體化 API 應用程式,并針對它使用我的應用程式代碼
我一般都在關注https://learn.microsoft.com/de-de/aspnet/core/test/integration-tests?view=aspnetcore-6.0。這對于普通的 HTTP(S) 端點非常有用。我的代碼如下所示:
_application = new WebApplicationFactory<Program>().WithWebHostBuilder(builder => { });
//HttpClient for http endpoints
_client = _application.CreateClient();
WebSocket 端點的創建如下所述:https ://learn.microsoft.com/de-de/aspnet/core/fundamentals/websockets?view=aspnetcore-6.0
app.Use(async (context, next) =>
{
if (context.Request.Path == "/" nameof(TestModel.WebsocketEvent))
{
if (context.WebSockets.IsWebSocketRequest)
{
TestModel.Instance.WebsocketEvent = await context.WebSockets.AcceptWebSocketAsync();
await ListenForClose(TestModel.Instance.WebsocketEvent);
}
}
}
對于與端點的連接,我在要測驗的代碼中使用 ClientWebsocket。
var ws = new ClientWebSocket();
await ws.ConnectAsync(_href, cancellation);
當我手動運行我的 API 應用程式并針對該實體執行我的代碼時,一切都按預期作業。WebSocket 連接已建立。
當我嘗試運行它時Microsoft.AspNetCore.Mvc.Testing,出現服務器拒絕連接的例外。
在某種程度上,這對我來說是有意義的,因為 ClientWebSocket 沒有使用 WebApplicationFactory 生成的任何東西。(例如 _application.Server.CreateWebSocketClient。另一方面,我確實想在我的代碼中使用 ClientWebSocket 而不是注入 Microsoft.AspNetCore.Mvc.Testing 的 WebSocketClient到我的生產代碼中。與 http 相比,我實際上得到了一個常規的 HttpClient,我可以注入它。
有誰知道如何使集成測驗與 ClientWebSocket 一起作業?是否有可能重用服務器 Microsoft.AspNetCore.Mvc.Testing 為 WebApplicationFactory 生成的請求以外的請求啟動?Microsoft.AspNetCore.Mvc.Testing 是否將 API 應用程式作為服務器運行?還是背景中有一些黑魔法?
到目前為止我檢查的內容:
- _href 是正確的
_application.Server.BaseAddress似乎沒有影響
uj5u.com熱心網友回復:
我想做的事情根本不可能。以下執行緒的答案將我推向了正確的方向。 從 WebApplicationFactory 注入 HttpClient
如果您知道自己在尋找什么,這與官方檔案相匹配:https ://learn.microsoft.com/en-us/aspnet/core/test/integration-tests?view=aspnetcore-6.0
因此,我只能使用 WebApplicationFactory 為我提供的訪問我的 Web API 應用程式的實體。我無法通過本地網路訪問 Web API 應用程式的實體。
感謝大家花時間閱讀和思考我的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/516734.html
標籤:C#网测试网络套接字
