当前位置: 首页 > news >正文

制作企业网站是怎么收费的网站建设文化如何

制作企业网站是怎么收费的,网站建设文化如何,可以做仿牌网站,网站建设方案目录简介 Microsoft.AspNetCore.TestHost是可以用于Asp.net Core 的功能测试工具。很多时候我们一个接口写好了#xff0c;单元测试什么的也都ok了#xff0c;需要完整调试一下#xff0c;检查下单元测试未覆盖到的代码是否有bug。步骤为如下#xff1a;程序打个断点-F5运行… 简介 Microsoft.AspNetCore.TestHost是可以用于Asp.net Core 的功能测试工具。很多时候我们一个接口写好了单元测试什么的也都ok了需要完整调试一下检查下单元测试未覆盖到的代码是否有bug。步骤为如下程序打个断点-F5运行-通常需要登录个测试账号-查找要调试api的入口-获得断点开始调试代码报错很多时候需要停止调试修改-回到第一步。如此反复循环做着重复的工作Microsoft.AspNetCore.TestHost正是为了解决这个问题它可以让你使用xTest或者MSTest进行覆盖整个HTTP请求生命周期的功能测试。 进行一个简单的功能测试 新建一个Asp.net Core WebApi和xUnit项目 ValuesController里面自带一个Action 我们在xUnit项目里面模拟访问这个接口首选安装如下nuget包 Microsoft.AspNetCore.TestHost Microsoft.AspNetCore.All很多依赖懒得找的话直接安装这个集成包百分之90涉及到AspNetCore的依赖都包含在里面 然后需要引用被测试的AspnetCoreFunctionalTestDemo项目新建一个测试类ValuesControllerTest 将GetValuesTest方法替换为如下代码其中startup类是应用自AspnetCoreFunctionalTestDemo项目        [Fact]        public void GetValuesTest(){            var client new TestServer(WebHost.CreateDefaultBuilder().UseStartupStartup()).CreateClient();            string result client.GetStringAsync(api/values).Result;Assert.Equal(result, JsonConvert.SerializeObject(new string[] { value1, value2 }));} 此时在ValueController打下断点   运行GetValuesTest调试测试 成功进入断点我们不用启动浏览器就可以进行完整的接口功能测试了。 修改内容目录与自动授权 上面演示了如何进行一个简单的功能测试但是存在两个缺陷 webApi在测试的时候实际的运行目录是在FunctionalTest目录下 对需要授权的接口不能正常测试会得到未授权的返回结果  1.内容目录 我们可以在Controller的Get方法输出当前的内容目录 内容目录是在测试x项目下这与我们的预期不符如果webapi项目对根目录下的文件有依赖关系例如appsetting.json则会找不到该文件解决的办法是在webHost中手动指定运行根目录 [Fact]public void GetValuesTest() {    var client new TestServer(WebHost.CreateDefaultBuilder()        .UseContentRoot(GetProjectPath(AspnetCoreFunctionalTestDemo.sln, , typeof(Startup).Assembly)).UseStartupStartup()).CreateClient();    string result client.GetStringAsync(api/values).Result;Assert.Equal(result, JsonConvert.SerializeObject(new string[] { value1, value2 })); }/// summary/// 获取工程路径/// /summary/// param nameslnName解决方案文件名例test.sln/param/// param namesolutionRelativePath如果项目与解决方案文件不在一个目录例如src文件夹中则传src/param/// param namestartupAssembly程序集/param/// returns/returnsprivate static string GetProjectPath(string slnName, string solutionRelativePath, Assembly startupAssembly) {      string projectName startupAssembly.GetName().Name;      string applicationBasePath PlatformServices.Default.Application.ApplicationBasePath;      var directoryInfo new DirectoryInfo(applicationBasePath);      do{          var solutionFileInfo new FileInfo(Path.Combine(directoryInfo.FullName, slnName));          if (solutionFileInfo.Exists){              return Path.GetFullPath(Path.Combine(directoryInfo.FullName, solutionRelativePath, projectName));}directoryInfo directoryInfo.Parent;}      while (directoryInfo.Parent ! null);      throw new Exception($Solution root could not be located using application root {applicationBasePath}.);}  GetProjectPath方法采用递归的方式找到startup的项目所在路径此时我们再运行 2.自动授权 每次测试时手动登录这是一件很烦人的事情所以我们希望可以自动话这里演示的时cookie方式的自动授权 首先在startup文件配置cookie认证 namespace AspnetCoreFunctionalTestDemo {       public class Startup{                  public Startup(IConfiguration configuration){Configuration configuration;}            public IConfiguration Configuration { get; }        // This method gets called by the runtime. Use this method to add services to the container.public void ConfigureServices(IServiceCollection services){services.AddMvc();             services.AddAuthentication(o o.DefaultScheme CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(o {o.ExpireTimeSpan new TimeSpan(0, 0, 30);o.Events.OnRedirectToLogin (context) {context.Response.StatusCode 401;                       return Task.CompletedTask;};});        }        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.public void Configure(IApplicationBuilder app, IHostingEnvironment env){            if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}            app.UseAuthentication();app.UseMvc();}} } 这里覆盖了cookie认证失败的默认操作改为返回401状态码。 在valuesController新增登录的Action并配置Get的Action需要授权访问 namespace AspnetCoreFunctionalTestDemo.Controllers {[Route(api/[controller])]    public class ValuesController : Controller{         // GET api/values              [HttpGet,Authorize]            public IEnumerablestring Get([FromServices]IHostingEnvironment env){             return new string[] { value1, value2 };}        // POST api/values[HttpGet(Login)]        public void Login(){             var identity new ClaimsIdentity(CookieAuthenticationDefaults.AuthenticationScheme);identity.AddClaim(new Claim(ClaimTypes.Name, huanent));            var principal new ClaimsPrincipal(identity);HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal).Wait();}} } 此时我们使用测试项目测试Get方法 如我们预期返回了401说明未授权。我们修改下GetValuesTest namespace FunctionalTest {    public class ValuesControllerTest{[Fact]         public void GetValuesTest(){             var client new TestServer(WebHost.CreateDefaultBuilder().UseStartupStartup().UseContentRoot(GetProjectPath(AspnetCoreFunctionalTestDemo.sln, , typeof(Startup).Assembly))).CreateClient();            var respone client.GetAsync(api/values/login).Result;SetCookie(client, respone);            var result client.GetAsync(api/values).Result;}        private static void SetCookie(HttpClient client, HttpResponseMessage respone){            string cookieString respone.Headers.GetValues(Set-Cookie).First();            string cookieBody cookieString.Split(;).First();client.DefaultRequestHeaders.Add(Cookie, cookieBody);}        /// summary/// 获取工程路径         /// /summary/// param nameslnName解决方案文件名例test.sln/param/// param namesolutionRelativePath如果项目与解决方案文件不在一个目录例如src文件夹中则传src/param/// param namestartupAssembly程序集/param/// returns/returnsprivate static string GetProjectPath(string slnName, string solutionRelativePath, Assembly startupAssembly){            string projectName startupAssembly.GetName().Name;             string applicationBasePath PlatformServices.Default.Application.ApplicationBasePath;            var directoryInfo new DirectoryInfo(applicationBasePath);            do{               var solutionFileInfo new FileInfo(Path.Combine(directoryInfo.FullName, slnName));                 if (solutionFileInfo.Exists){                     return Path.GetFullPath(Path.Combine(directoryInfo.FullName, solutionRelativePath, projectName));}directoryInfo directoryInfo.Parent;}             while (directoryInfo.Parent ! null);            throw new Exception($Solution root could not be located using application root {applicationBasePath}.);}} } 我们首先访问api/Values/Login获取到Cookie然后讲cookie附在httpclient的默认http头上这样就能够成功访问需要授权的接口了 总结 通过上面演示我们已经可以很大程度地模拟了整个api请求让我们可以方便地一键调试目标接口再也不用开浏览器或postman了。 附上演示项目地址https://github.com/huanent/AspnetCoreFunctionalTestDemo 原文http://www.cnblogs.com/huanent/p/7886282.html .NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com
http://www.yutouwan.com/news/220308/

相关文章:

  • 东莞网站的关键字推广网站页面设计如何收费
  • 外国做美食视频网站淮南市潘集区信息建设网站
  • 不用下载直接浏览的网站做不规则几何图形的网站
  • 做网站买域名网站建设求职
  • 企业网站建设与推广多少钱备案的网站程序上传
  • 东莞做网站的公司吗上海今天发生的重大新闻5条
  • 英文版科技网站安徽建设监理协会网站
  • 甘肃建设住房厅网站首页c2c是指什么
  • 台州做网站比较好的有哪些wordpress破解密码
  • 在线推广是网站推广企业微信小程序定制
  • 优秀网站设计参考广州市住房住建局网站
  • 静安区网站开发小企业网站建设5000块贵吗
  • 淮安淮阴网站建设万网 公司网站链接
  • 网络游戏推广英文seo外链发布工具
  • 接做网站的重庆装修公司排名表
  • 网站推广方案怎么写的怎么去推广一个app
  • 安国市城乡建设局网站网站kv如何做
  • 宁波百度做网站的公司哪家好贵州小程序制作开发
  • 网站设计基本要素珠海华中建设工程有限公司网站
  • 长春网站建设吉网传媒实力牜wordpress seo怎么做
  • 网站建设工作部署会wordpress会员卡
  • 网站域名的建立动漫制作专业大专院校
  • 国外 设计公司手机网站郑州seo优化公司
  • 网站建设使用的什么软件有哪些方面网站登录页面模板下载
  • 微信软件seo外包优化网站 sit
  • 淘宝客导购网站怎么建设馆陶网站推广
  • 企业网站在策划阶段最重要的工作是什么wordpress 提速
  • 网站建设到运营赚钱网站推广优化趋势
  • 有做挂名法人和股东的网站吗网站建设云解析dns有什么用
  • 餐饮企业网站设计网站建设技术有哪些