第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

通過代碼啟動(dòng).NET Core Web API——多平臺(tái)(linux/windows)

通過代碼啟動(dòng).NET Core Web API——多平臺(tái)(linux/windows)

C#
侃侃爾雅 2022-11-13 17:30:41
我正在為我的 Web API 編寫單元測(cè)試(一切都是使用 .Net Core 2.2 實(shí)現(xiàn)的)。對(duì)于此測(cè)試,我必須實(shí)際向 Web API 發(fā)送請(qǐng)求。但是,我真的不知道如何通過代碼啟動(dòng) API。您似乎無法通過代碼啟動(dòng)網(wǎng)絡(luò)服務(wù)。所以我嘗試了使用腳本的解決方法。這在 Windows 上運(yùn)行良好,但是 Linux 引起了一些問題。dotnet run --project <pathToProject>通常會(huì)啟動(dòng) API。但是,在執(zhí)行腳本后,一切都立即終止。創(chuàng)建的 C# 流程實(shí)例具有ExitCode = 0和HasExited = true.有沒有人遇到過這樣的問題?或者有什么想法?
查看完整描述

1 回答

?
郎朗坤

TA貢獻(xiàn)1921條經(jīng)驗(yàn) 獲得超9個(gè)贊

如果我正確理解你的問題,那么有一種非常簡(jiǎn)單的方法可以做到這一點(diǎn)。在Microsoft.AspNetCore.TestHost命名空間中,有一個(gè)TestServer類可以讓您輕松地為您的 API 啟動(dòng)測(cè)試服務(wù)器。但是,有一些事情需要你注意,比如加載什么配置,加載什么服務(wù)等等。這樣做的背景是,當(dāng)您測(cè)試和使用內(nèi)存集合或任何可能適合您的測(cè)試時(shí),您可能想模擬一些服務(wù),如數(shù)據(jù)庫存儲(chǔ)庫。


這是一個(gè)基本的實(shí)現(xiàn)。首先,在你要測(cè)試的API中,確保需要模擬的服務(wù)是通過Startup類中的虛方法注冊(cè)的。


剝離方法的示例ConfigureServices:


public void ConfigureServices(IServiceCollection services)

        {

            RegisterDatabase(services);


        }

并且實(shí)現(xiàn)也在Startup.cs(我在這個(gè)例子中使用Mongo):


protected virtual void RegisterDatabase(IServiceCollection services)

        {

            string mongoConnectionString = Configuration.GetConnectionString("DevCN");

            services.AddScoped<IMyDbProcessor, MyDbProcessor>(sp =>

            {

                var mongoClient = new MongoClient(mongoConnectionString);

                return new MyDbProcessor(mongoClient);

            });

        }

請(qǐng)注意,數(shù)據(jù)處理類特定于我從中獲取此示例的 API。


接下來在測(cè)試項(xiàng)目中(不管您使用什么測(cè)試運(yùn)行程序或單元測(cè)試框架),您將創(chuàng)建一個(gè)StartUp覆蓋數(shù)據(jù)庫注冊(cè)的類。例如,在此覆蓋中,您可以注冊(cè)模擬。


public class MyTestStartup : Startup

    {


        public MyTestStartup(IConfiguration configuration)

        {   

            Configuration = configuration;

        }


        protected override void RegisterDatabase(IServiceCollection services)

        {

                services.AddScoped<IMyDbProcessor>(db => new TestDbProcessor());

        }

    }

然后仍然在單元測(cè)試項(xiàng)目中,您可以創(chuàng)建一個(gè)類來保存您的測(cè)試服務(wù)器并根據(jù)需要進(jìn)行配置。這是一個(gè)看起來如何的示例:


public class MyTestServer

    {

        //I add an HttpClient that will be used in the test methods to make the actual call

        internal HttpClient Client { get; set; }



        public MyTestServer()

        {

            IWebHostBuilder builder = new WebHostBuilder()

                .UseContentRoot(Directory.GetCurrentDirectory())

                .ConfigureAppConfiguration((hostingContext, config) =>

                {

                    IHostingEnvironment env = hostingContext.HostingEnvironment;

                    config.AddJsonFile("testsettings.json", optional: true)

                        .AddJsonFile($"testsettings.{env.EnvironmentName}.json", optional: true);

                })

                .UseStartup<MyTestStartup>();

            builder.UseSetting(WebHostDefaults.ApplicationKey, typeof(Program).GetTypeInfo().Assembly.FullName);

            var testServer = new TestServer(builder);

            Client = testServer.CreateClient();

        }

    }

這里要特別注意的typeof(Program).GetTypeInfo().Assembly.FullName)部分?!俺绦颉睉?yīng)該P(yáng)rogram.cs在您的 API 中引用您的。然后在單元測(cè)試類中,您可以使用該類的構(gòu)造函數(shù)來創(chuàng)建一個(gè)新服務(wù)器并獲取所需的客戶端進(jìn)行調(diào)用。


_server = new MyTestServer();

            _client = _server.Client;

現(xiàn)在您可以使用客戶端調(diào)用您的 API。每次運(yùn)行測(cè)試時(shí),都會(huì)有一個(gè)運(yùn)行 API 的測(cè)試服務(wù)器。 注意:如果您不想添加自定義配置(特別針對(duì)您的測(cè)試環(huán)境),您可以簡(jiǎn)化 Web 服務(wù)器的創(chuàng)建。


查看完整回答
反對(duì) 回復(fù) 2022-11-13
  • 1 回答
  • 0 關(guān)注
  • 128 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)