国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

精通中間件測(cè)試:Asp.Net Core實(shí)戰(zhàn)指南,提升應(yīng)用穩(wěn)定性和可靠性

這篇具有很好參考價(jià)值的文章主要介紹了精通中間件測(cè)試:Asp.Net Core實(shí)戰(zhàn)指南,提升應(yīng)用穩(wěn)定性和可靠性。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

引言

在上一章節(jié)我們實(shí)戰(zhàn)了在Asp.Net Core中的項(xiàng)目實(shí)戰(zhàn),這一章節(jié)講解一下如何測(cè)試Asp.Net Core的中間件。

TestServer

還記得我們?cè)诩蓽y(cè)試中提供的TestServer嗎?
TestServer 是由 Microsoft.AspNetCore.TestHost 包提供的。包含了用于在測(cè)試環(huán)境中模擬 ASP.NET Core 應(yīng)用程序的類和方法。通過(guò)使用 TestServer,開(kāi)發(fā)人員可以在測(cè)試中模擬整個(gè)應(yīng)用程序的運(yùn)行環(huán)境,包括中間件的執(zhí)行,從而進(jìn)行集成測(cè)試和端到端測(cè)試。

中間件可以使用 TestServer 單獨(dú)測(cè)試。 這樣便可以:

  • 實(shí)例化只包含需要測(cè)試的組件的應(yīng)用管道。
  • 發(fā)送自定義請(qǐng)求以驗(yàn)證中間件行為。

優(yōu)點(diǎn):

  • 請(qǐng)求會(huì)發(fā)送到內(nèi)存中,而不是通過(guò)網(wǎng)絡(luò)進(jìn)行序列化。
  • 這樣可以避免產(chǎn)生額外的問(wèn)題,例如端口管理和 HTTPS 證書(shū)。
  • 中間件中的異??梢灾苯恿骰卣{(diào)用測(cè)試。
  • 可以直接在測(cè)試中自定義服務(wù)器數(shù)據(jù)結(jié)構(gòu),如 HttpContext

實(shí)戰(zhàn)

VS 新建測(cè)試項(xiàng)目dotNetParadise.MiddlerWareTest

Nuget 安裝Microsoft.AspNetCore.TestHost

PM> NuGet\Install-Package Microsoft.AspNetCore.TestHost -Version 8.0.4

既然我們是要測(cè)試中間件 那首先得先在我們的Sample.Api中創(chuàng)建一個(gè)中間件

定義MyMiddleware中間件

public class MyMiddleware(RequestDelegate next)
{
    public async Task InvokeAsync(HttpContext context)
    {
        // 在請(qǐng)求處理前執(zhí)行的邏輯
        context.Response.ContentType = "text/plain";
        context.Response.Headers.TryAdd("X-Custom-Header", "CustomValue");
        await context.Response.WriteAsync("Test My Middleware");
        // 調(diào)用下一個(gè)中間件
        await next(context);

        // 在請(qǐng)求處理后執(zhí)行的邏輯
        await context.Response.WriteAsync("Middleware Test Completed");
    }
}

定義測(cè)試類

        // Arrange
        using var host = await new HostBuilder()
            .ConfigureWebHost(webBuilder =>
            {
                webBuilder
                    .UseTestServer()
                    .ConfigureServices(services =>
                    {
                        // 在這里可以注入服務(wù)
                    })
                    .Configure(app =>
                    {
                        app.UseMiddleware<MyMiddleware>();
                    });
            })
            .StartAsync();

        // Act
        var response = await host.GetTestClient().GetAsync("/");

        // Assert
        response.EnsureSuccessStatusCode(); // 確保請(qǐng)求成功
        var responseContent = await response.Content.ReadAsStringAsync();
        Assert.Contains("Test My Middleware", responseContent);
        Assert.Contains("Middleware Test Completed", responseContent);

Run Test

精通中間件測(cè)試:Asp.Net Core實(shí)戰(zhàn)指南,提升應(yīng)用穩(wěn)定性和可靠性

使用 HttpContext 發(fā)送請(qǐng)求

可以使用 TestServer 來(lái)設(shè)置測(cè)試環(huán)境,并創(chuàng)建一個(gè)模擬的 HttpContext對(duì)象來(lái)代表一個(gè)請(qǐng)求

    [Fact]
    public async Task TestMiddleware_ExpectedResponse()
    {
        using var host = await new HostBuilder()
            .ConfigureWebHost(webBuilder =>
            {
                webBuilder
                    .UseTestServer()
                    .ConfigureServices(services =>
                    {
                    })
                    .Configure(app =>
                    {
                        app.UseMiddleware<MyMiddleware>();
                    });
            })
            .StartAsync();

        var server = host.GetTestServer();
        server.BaseAddress = new Uri("http://localhost");

        var context = await server.SendAsync(c =>
        {
            c.Request.Method = HttpMethods.Get;
            c.Request.Path = "/";
            c.Request.Host = new HostString("localhost");
            c.Request.Scheme = "http";
        });
        //act
        Assert.True(context.RequestAborted.CanBeCanceled);
        Assert.Equal(HttpProtocol.Http11, context.Request.Protocol);
        // 驗(yàn)證響應(yīng)
        Assert.Equal(StatusCodes.Status200OK, context.Response.StatusCode);
        var customHeader = context.Response.Headers["X-Custom-Header"].ToString();
        Assert.Equal("CustomValue", customHeader);
    }

使用 SendAsync 的好處包括:
通過(guò)設(shè)置 HttpContext 的任何屬性,從而精確控制請(qǐng)求的各個(gè)方面。相比于使用 HttpClient,SendAsync 通常更快,因?yàn)樗@過(guò)了網(wǎng)絡(luò)層。
集成測(cè)試:這是測(cè)試整個(gè)請(qǐng)求處理管道(包括所有中間件)的好方法。
然而,它也有一些限制:

局限性
SendAsync 主要用于集成測(cè)試,而不是單元測(cè)試。它測(cè)試的是整個(gè)請(qǐng)求處理流程,而不是單個(gè)組件。
模擬限制:雖然你可以設(shè)置 HttpContext 的許多屬性來(lái)模擬請(qǐng)求,但某些方面(如用戶認(rèn)證狀態(tài)或外部依賴項(xiàng))可能難以完全模擬。

添加請(qǐng)求路由

這個(gè)比較好理解,就是在TestServer中添加路由的功能和Asp.Net Core中添加路由基本一致

    [Fact]
    public async Task TestWithEndpoint_ExpectedResponse()
    {
        using var host = await new HostBuilder()
            .ConfigureWebHost(webBuilder =>
            {
                webBuilder
                    .UseTestServer()
                    .ConfigureServices(services =>
                    {
                        services.AddRouting();
                    })
                    .Configure(app =>
                    {
                        app.UseRouting();
                        //app.UseMiddleware<MyMiddleware>();
                        app.UseEndpoints(endpoints =>
                        {
                            endpoints.MapGet("/hello", () =>
                                TypedResults.Text("Hello Tests"));
                        });
                    });
            })
            .StartAsync();

        var client = host.GetTestClient();

        var response = await client.GetAsync("/hello");

        Assert.True(response.IsSuccessStatusCode);
        var responseBody = await response.Content.ReadAsStringAsync();
        Assert.Equal("Hello Tests", responseBody);

    }

在測(cè)試場(chǎng)景中,添加請(qǐng)求路由的好處主要體現(xiàn)在以下幾個(gè)方面:

  • 模擬真實(shí)環(huán)境:
    通過(guò)添加請(qǐng)求路由,你可以模擬出與真實(shí)生產(chǎn)環(huán)境相似的請(qǐng)求處理流程。這使得測(cè)試更加接近實(shí)際使用情況,從而提高了測(cè)試的可靠性和有效性。

  • 控制測(cè)試的粒度:
    你可以針對(duì)特定的路由進(jìn)行精確測(cè)試,確保每個(gè)路由都能正確響應(yīng)并返回預(yù)期的結(jié)果。這有助于發(fā)現(xiàn)潛在的路由錯(cuò)誤或邏輯問(wèn)題,提高了測(cè)試的精度。

  • 隔離測(cè)試:
    在測(cè)試過(guò)程中,你可以通過(guò)配置路由來(lái)隔離特定的功能或組件,從而避免其他部分的干擾。這種隔離測(cè)試有助于更準(zhǔn)確地定位問(wèn)題,提高了測(cè)試的效率。

  • 模擬異常場(chǎng)景:
    通過(guò)配置路由,你可以模擬各種異常場(chǎng)景,如路由不存在、參數(shù)錯(cuò)誤等。這有助于測(cè)試應(yīng)用程序在異常情況下的響應(yīng)和處理能力,提高了應(yīng)用程序的健壯性。

  • 自動(dòng)化測(cè)試:
    在自動(dòng)化測(cè)試框架中,添加請(qǐng)求路由可以使得測(cè)試用例更加易于編寫(xiě)和執(zhí)行。通過(guò)發(fā)送請(qǐng)求到特定的路由并驗(yàn)證響應(yīng),你可以自動(dòng)化地檢查應(yīng)用程序的功能和性能。

最后

本章我們探討了如何在Asp.Net Core項(xiàng)目中測(cè)試中間件的方法和技巧。通過(guò)使用TestServerHttpContext發(fā)送請(qǐng)求,我們可以模擬整個(gè)應(yīng)用程序的運(yùn)行環(huán)境,從而進(jìn)行集成測(cè)試和端到端測(cè)試。同時(shí),我們也介紹了如何添加請(qǐng)求路由來(lái)模擬不同的場(chǎng)景,并對(duì)中間件的行為進(jìn)行驗(yàn)證。

通過(guò)測(cè)試中間件,我們可以確保其在處理請(qǐng)求時(shí)的行為符合預(yù)期,提高應(yīng)用程序的穩(wěn)定性和可靠性。測(cè)試不僅可以幫助發(fā)現(xiàn)潛在的問(wèn)題,還可以在開(kāi)發(fā)過(guò)程中及早發(fā)現(xiàn)和解決 bug,提高代碼質(zhì)量和開(kāi)發(fā)效率。
??歡迎關(guān)注筆者公眾號(hào)一起學(xué)習(xí)交流,獲取更多有用的知識(shí)~
精通中間件測(cè)試:Asp.Net Core實(shí)戰(zhàn)指南,提升應(yīng)用穩(wěn)定性和可靠性文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-855064.html

  • 測(cè)試中間件
  • 本文完整源代碼

到了這里,關(guān)于精通中間件測(cè)試:Asp.Net Core實(shí)戰(zhàn)指南,提升應(yīng)用穩(wěn)定性和可靠性的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ASP.NET Core中間件記錄管道圖和內(nèi)置中間件

    ASP.NET Core中間件記錄管道圖和內(nèi)置中間件

    下圖顯示了 ASP.NET Core MVC 和 Razor Pages 應(yīng)用程序的完整請(qǐng)求處理管道 中間件組件在文件中添加的順序 Program.cs 定義了請(qǐng)求時(shí)調(diào)用中間件組件的順序以及響應(yīng)的相反順序。該順序?qū)τ诎踩浴⑿阅芎凸δ?至關(guān)重要。 ? 內(nèi)置中間件 原文 翻譯 Middleware Description Order 中間件 描述 命

    2024年02月13日
    瀏覽(20)
  • 如何在 ASP.NET Core 配置請(qǐng)求超時(shí)中間件

    如何在 ASP.NET Core 配置請(qǐng)求超時(shí)中間件

    本文參考官方文檔,使用Asp.net core 8.0 的最小API 模板項(xiàng)目,配置超時(shí)中間件。 超時(shí)中間件可用于所有類型的ASP.NET Core應(yīng)用:最小 API、帶控制器的 Web API、MVC 和 Razor Pages。請(qǐng)求超時(shí)的屬性位于命名空間 Microsoft.AspNetCore.Http.Timeouts 中。 需要注意的是,當(dāng)應(yīng)用在調(diào)試模式下運(yùn)行時(shí)

    2024年01月20日
    瀏覽(93)
  • asp.net core中間件預(yù)防防止xss攻擊

    上面實(shí)現(xiàn)思路是針對(duì)json序列化后的string字符串進(jìn)行編碼防止xss攻擊 其他實(shí)現(xiàn)比如中間件、Action的AOP方法也是可以的,可以自己實(shí)現(xiàn) 主要是看web項(xiàng)目使用的是那個(gè)json序列化工具newtonsoft就用newtonsoft,system.text.json就用下面的那個(gè)

    2024年02月07日
    瀏覽(21)
  • 1.ASP.NET Core中間件管道MAP的作用?

    簡(jiǎn)述: Map基于給定請(qǐng)求路徑的匹配項(xiàng)來(lái)創(chuàng)建請(qǐng)求管道分支。可以針對(duì)不同的路徑添加不同的中間件。 詳解: 中間件是組裝到應(yīng)用程序管道中以處理請(qǐng)求和響應(yīng)的軟件組件。 每個(gè)組件都選擇是否將請(qǐng)求傳遞給管道中的下一個(gè)組件,并可以在管道中調(diào)用下一個(gè)組件之前和之后執(zhí)

    2024年02月17日
    瀏覽(21)
  • .net 溫故知新【17】:Asp.Net Core WebAPI  中間件

    .net 溫故知新【17】:Asp.Net Core WebAPI 中間件

    到這篇文章為止,關(guān)于.NET \\\"溫故知新\\\"系列的基礎(chǔ)知識(shí)就完結(jié)了,從這一系列的系統(tǒng)回顧和再學(xué)習(xí),對(duì)于.NET core、ASP.NET CORE又有了一個(gè)新的認(rèn)識(shí)。 不光是從使用,還包括這些知識(shí)點(diǎn)的原理,雖然深入原理談不上,但對(duì)于日常使用也夠了,我想的是知其然,知其所以然。 在實(shí)際

    2024年01月18日
    瀏覽(96)
  • ASP.NET Core如何知道一個(gè)請(qǐng)求執(zhí)行了哪些中間件?

    ASP.NET Core如何知道一個(gè)請(qǐng)求執(zhí)行了哪些中間件?

    需要添加兩個(gè)Nuget包分別是: Microsoft.AspNetCore.MiddlewareAnalysis 和 Microsoft.Extensions.DiagnosticAdapter ,前者是分析記錄中間件核心代碼實(shí)現(xiàn)后者是用來(lái)接收日志輸出的,由于是用的DiagnosticSource方式記錄日志,所以需要使用DiagnosticListener對(duì)象的SubscribeWithAdapter方法來(lái)訂閱。 這個(gè)適配器

    2023年04月09日
    瀏覽(101)
  • ASP.NET Core 的 Web Api 實(shí)現(xiàn)限流 中間件

    ASP.NET Core 的 Web Api 實(shí)現(xiàn)限流 中間件

    Microsoft.AspNetCore.RateLimiting ?中間件提供速率限制(限流)中間件。 它是.NET 7 以上版本才支持的中間件,剛看了一下,確實(shí)挺好用,下面給大家簡(jiǎn)單介紹一下: RateLimiterOptionsExtensions?類提供下列用于限制速率的擴(kuò)展方法:????? 固定窗口限制器 滑動(dòng)窗口限制器 令牌桶限

    2024年01月17日
    瀏覽(18)
  • asp.net core 一種基于token 和 Permission 的權(quán)限管理中間件示例

    asp.net core 一種基于token 和 Permission 的權(quán)限管理中間件示例

    asp.net core webapi 下面,想做一個(gè)過(guò)濾權(quán)限的Filter,配合token,對(duì)api做一個(gè)較為細(xì)粒度的權(quán)限控制, 該filter (PermissionFilter) 的作用是用戶LoginUser.Permissions 列表中有 Key指定的權(quán)限才可以訪問(wèn),沒(méi)有則返回403 錯(cuò)誤碼。 ? 1. 先上封裝后的使用效果 說(shuō)明:要求登錄即可,不要求特定權(quán)限

    2024年02月05日
    瀏覽(22)
  • .net core 中間件

    先說(shuō)一下 管道 這個(gè)概念: 在ASP.NET Core中,管道(Pipeline)是一個(gè)由多個(gè)中間件組成的處理請(qǐng)求和生成響應(yīng)的機(jī)制。請(qǐng)求從第一個(gè)中間件開(kāi)始,經(jīng)過(guò)一系列中間件的處理,然后生成最終的響應(yīng)。 每個(gè)中間件都會(huì)處理請(qǐng)求,并將請(qǐng)求傳遞給下一個(gè)中間件,直到達(dá)到最后一個(gè)中間

    2024年02月14日
    瀏覽(26)
  • .net core 中什么是中間件

    在 .NET Core 中,中間件(Middleware)是 ASP.NET Core 應(yīng)用程序處理請(qǐng)求和響應(yīng)的組件。中間件位于應(yīng)用程序的請(qǐng)求處理管道中,它可以截獲請(qǐng)求,執(zhí)行一些邏輯,并將請(qǐng)求傳遞給下一個(gè)中間件或終止請(qǐng)求的執(zhí)行。 中間件的主要作用是實(shí)現(xiàn)橫切關(guān)注點(diǎn),處理跨請(qǐng)求的功能和任務(wù),例

    2024年01月17日
    瀏覽(33)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包