广告
返回顶部
首页 > 资讯 > 精选 >Net6 Xunit集成测试问题怎么解决
  • 759
分享到

Net6 Xunit集成测试问题怎么解决

2023-06-30 15:06:00 759人浏览 安东尼
摘要

本篇内容主要讲解“Net6 Xunit集成测试问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Net6 Xunit集成测试问题怎么解决”吧!1.新建测试项目2.使用

本篇内容主要讲解“Net6 Xunit集成测试问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Net6 Xunit集成测试问题怎么解决”吧!

1.新建测试项目

Net6 Xunit集成测试问题怎么解决

2.使用到的类库

Net6 Xunit集成测试问题怎么解决

Xunti与xunit.runner.visualstudio创建测试项目是自带

Xunit.Extensions.Ordering 这是一个排序执行测试方法的扩展,因为有些方法是需要按照顺序执行,如获取图形验证码-->发送手机验证码-->到获取Token这是一个有序的过程,如果没有按照顺序执行肯定是不对的。

3.注入

就是将要测试项目的所有注入重新注入测试项目(Program.cs)中和Startup中的所有东东全部注入,NET6中默认取消了Startup类,那么就要手工全部将这些注入再测试项目中添加一次,注入的时候有些是不兼容的做一下小的改动就行,因为https://GitHub.com/pengweiqhca/Xunit.DependencyInjection的注入还是停留在NET5以下版本的,哦对了,还有中间件也是需要在测试项目中添加的,

1 NET5 以下,测试项目中的Startup需要自己手工创建,区别在于NET5项目有Startup注入的时候不用手动写很多东西,测试项目直接从项目中的Startup查找注入,

public class Startup    {        // custom host build        public void ConfigureHost(IHostBuilder hostBuilder)        {            hostBuilder                .ConfigureHostConfiguration(builder =>                {                    builder.AddJSONFile("appsettings.json", true);                })                .ConfigureWEBHostDefaults(builder =>                {                    builder.UseStartup<Dx.H5.Service.Startup>();//此处为项目中的startup,不是测试项目中的startup                    builder.UseTestServer();                    builder.ConfigureServices(services =>                    {                        services.AddSingleton(sp => sp.GetRequiredService<IHost>()                            .GetTestClient()                        );                    });                })                ;        }        // add services need to injection        // ConfigureServices(IServiceCollection services)        // ConfigureServices(IServiceCollection services, HostBuilderContext hostBuilderContext)        // ConfigureServices(HostBuilderContext hostBuilderContext, IServiceCollection services)        public void ConfigureServices(IServiceCollection services)        {            // ready check            //services.AddHostedService<ReadyCheckHostedService>();        }        public void Configure(ILoggerFactory loggerFactory, ITestOutputHelperAccessor outputHelperAccessor)        {            loggerFactory.AddProvider(new XunitTestOutputLoggerProvider(outputHelperAccessor));        }    }

2 NET6 ,测试项目中的Startup需要自己手工创建,NET6 项目取消了Startup那么就需要手工搬移所有的注入,需要注意的是Startup中的ConfigureServices不支持重载,也就是你只能用一个ConfigureServices方法,见如下示例,还有测试日志的注入,但是在测试项目中使用ILogger<>好像是有问题的,有时日志不打印, 使用private readonly ITestOutputHelperAccessor _testOutputHelperAccessor; 替代ILogger<>,直接在测试类构造函数中注入就行

public class Startup    {        const string DefaultCorsPolicyName = "Default";        public void ConfigureHost(IHostBuilder hostBuilder) =>            hostBuilder.ConfigureWebHost(webHostBuilder => webHostBuilder                .UseTestServer()                .Configure(Configure)                .UseUrls("Http://*:17890","http://*:17880")                .ConfigureServices(services =>                {                    services.AddSingleton(sp => sp.GetRequiredService<IHost>()                            .GetTestClient()                        );                })            )            .ConfigureAppConfiguration(lb => lb.AddJsonFile("appsettings.json", false, true));        public void ConfigureServices(IServiceCollection services, HostBuilderContext context)        {            services.AddControllers();            services.AddEndpointsapiExplorer();            services.AddswaggerGen();            services.AddHttpClient();        }        public void Configure(ILoggerFactory loggerFactory, ITestOutputHelperAccessor accessor) =>        loggerFactory.AddProvider(new XunitTestOutputLoggerProvider(accessor));        ////public void ConfigureHost(IHostBuilder hostBuilder) { }        //public void ConfigureServices(IServiceCollection services)        //{        //}        //public IHostBuilder CreateHostBuilder(AssemblyName assemblyName)         //{        //    return new HostBuilder();        //}        private void Configure(IApplicationBuilder app)        {            //if (app.Environment.IsDevelopment())            //{            //    app.UseSwagger();            //    app.UseSwaggerUI();            //}            app.UseRouting();            app.UseAuthorization();            app.UseEndpoints(endpoints =>            {                endpoints                .MapControllers();                endpoints.MapGet("/hb/generatetoken", context =>                {                    return context.Response.WriteAsync(GenerateToken(context));                });            });        }        string GenerateToken(HttpContext httpContext)        {            return "dfdfdfdfd";        }    }public static IEnumerable<object?[]> ReadFile()        {            yield return new object[] { "123"};            yield return new object[] { "456" };        }

4.创建测试类测试方法:

需要注意的是api接口测试中url忽略host与端口,默认端口配置请查阅https://github.com/pengweiqhca/Xunit.DependencyInjection文档,UnitTest2中的测试方法是带有数据集合的测试方法,及测试方法是执行多次的,测试方法中的参数数据就是由MemberData(nameof(ReadFile)),其中数据方法ReadFile必须是 public staticReadFile要不然会有报错

using Microsoft.Extensions.Logging;using Newtonsoft.Json;using System.Collections.Generic;using System.net.Http;using System.Net.Http.Headers;using System.Threading.Tasks;using Xunit;using Xunit.DependencyInjection;using Xunit.Extensions.Ordering;using static webapiXunit.Controllers.WeatherForecastController;namespace Xunit.WebApiTest{    [Order(1)]    public class UnitTest1    {        private HttpClient _client;        private ILogger<UnitTest1> _logger;        //private readonly ITestOutputHelperAccessor _testOutputHelperAccessor;        public UnitTest1(            //ITestOutputHelperAccessor testOutputHelperAccessor            ILogger<UnitTest1> logger,            HttpClient client            )        {            _logger = logger;            _client = client;        }        [Order(1)]        [Fact(DisplayName = "1")]        public async Task Test1()        {            var c = new MyClass();            c.Name = "1";            c.Description = "e";            using var request = new HttpRequestMessage(HttpMethod.Post, "WeatherForecast/hb/post/add");            var content = JsonConvert.SerializeObject(c);            request.Content = new StrinGContent(content);            request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");            var resp = await _client.SendAsync(request);            //var resp=await _client.GetAsync("/hb/generatetoken");            _logger.LogInfORMation("成功");            if (resp.IsSuccessStatusCode)            {                var str = await resp.Content.ReadAsStringAsync();                Assert.True(true);                return;            }            Assert.True(false);        }        [Order(2)]        [Fact(DisplayName = "2")]        public async Task Test2()        {            var c = new MyClass();            c.Name = "1";            c.Description = "e";            using var request = new HttpRequestMessage(HttpMethod.Post, "WeatherForecast/hb/post/add");            var content = JsonConvert.SerializeObject(c);            request.Content = new StringContent(content);            request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");            var resp = await _client.SendAsync(request);            //var resp=await _client.GetAsync("/hb/generatetoken");            //_testOutputHelperAccessor.Output.WriteLine("");            _logger.LogInformation("成功");            if (resp.IsSuccessStatusCode)            {                var str = await resp.Content.ReadAsStringAsync();                Assert.True(true);                return;            }            Assert.True(false);        }    }    [Order(2)]    public class UnitTest2    {        private HttpClient _client;        private ILogger<UnitTest2> _logger;        public UnitTest2(            ILogger<UnitTest2> logger,            HttpClient client            )        {            _logger = logger;            _client = client;        }        [Theory]        [MemberData(nameof(ReadFile))]        public async Task Test2(string name)        {            _logger.LogInformation(name);            Assert.True(true);        }        public static IEnumerable<object?[]> ReadFile()        {            yield return new object[] { "123"};            yield return new object[] { "456" };        }    }}

5.排序执行测试方法:

使用Xunit.Extensions.Ordering进行排序执行测试方法时:首先在测试项目中新建一个AssemblyInfo.cs加入如下内容,主要没有类名及命名空间,其中[assembly: TestFramework("Xunit.Extensions.Ordering.TestFramework", "Xunit.Extensions.Ordering")]是一个按照集合进行排序的使用,但是他与已有xunit assembly冲突,暂时么有找到解决方法,所以该排序功能暂时不支持,类中的[Order(2)]为第一优先级排序顺序,方法中的[Order(2)]即在类的顺序下再排序

using Xunit;
using Xunit.Extensions.Ordering;
[assembly: CollectionBehavior(DisableTestParallelization = true)]
//[assembly: TestFramework("Xunit.Extensions.Ordering.TestFramework", "Xunit.Extensions.Ordering")]
[assembly: TestCaseOrderer("Xunit.Extensions.Ordering.TestCaseOrderer", "Xunit.Extensions.Ordering")]
[assembly: TestCollectionOrderer("Xunit.Extensions.Ordering.CollectionOrderer", "Xunit.Extensions.Ordering")]

using Xunit;using Xunit.Extensions.Ordering;[assembly: CollectionBehavior(DisableTestParallelization = true)]//[assembly: TestFramework("Xunit.Extensions.Ordering.TestFramework", "Xunit.Extensions.Ordering")][assembly: TestCaseOrderer("Xunit.Extensions.Ordering.TestCaseOrderer", "Xunit.Extensions.Ordering")][assembly: TestCollectionOrderer("Xunit.Extensions.Ordering.CollectionOrderer", "Xunit.Extensions.Ordering")]

6.运行测试项目:

在vs中运行测试项目中右键可以看到运行和调试测试项目运行比较简单,如果在服务器上需要使用dotnet test运行测试,注意配置文件要与服务器的匹配,将项目整体目录拷贝到服务器,cd 到测试项目目录下执行 dotnet test,有多少个接口瞬间测试完毕,而且在项目后续迭代更新的时候,只需要执行以下就可以测试所有的接口。

到此,相信大家对“Net6 Xunit集成测试问题怎么解决”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Net6 Xunit集成测试问题怎么解决

本文链接: https://www.lsjlt.com/news/330055.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Net6 Xunit集成测试问题怎么解决
    本篇内容主要讲解“Net6 Xunit集成测试问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Net6 Xunit集成测试问题怎么解决”吧!1.新建测试项目2.使用...
    99+
    2023-06-30
  • 关于Net6 Xunit 集成测试的问题
    目录1.新建测试项目2.使用到的类库3.注入4.创建测试类测试方法:5.排序执行测试方法:6.运行测试项目:对于单元测试、集成测试大部分开发的朋友都懒得去写,因为这要耗费精力去设计去...
    99+
    2022-11-13
  • spring单元测试重复加载问题怎么解决
    在Spring单元测试中,可能会遇到重复加载的问题,即同一个bean被加载了多次。这可能会导致测试结果不准确或出现其他异常。以下是一...
    99+
    2023-08-31
    spring
  • mysql连接测试不成功怎么解决
    首先,请确保您的MySQL服务已启动,并且端口号正确。如果您的MySQL连接测试不成功,可以尝试以下步骤来解决问题:1. 检查用户名...
    99+
    2023-08-30
    mysql
  • mysql5.5字符集问题怎么解决
    本篇内容介绍了“mysql5.5字符集问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!安装了个5...
    99+
    2022-10-18
  • 解决springboot 2.x集成log4j2调试日志无法关闭的问题
    springboot2.x集成log4j2时,始终无法关闭log4j2自身的日志输出 已经做了如下配置: 在log4j2.xml的配置文件中,配置configuration的stat...
    99+
    2022-11-12
  • redis集群怎么解决脑裂问题
    redis集群怎么解决脑裂问题?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。什么是redis的集群脑裂?redis的集群脑裂是指因为网络问...
    99+
    2022-10-18
  • ArrayList集合容器问题怎么解决
    本篇内容主要讲解“ArrayList集合容器问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ArrayList集合容器问题怎么解决”吧!ArrayList 踩坑首先大家看看这段代码有什...
    99+
    2023-06-16
  • Spring Boot集成Seata怎样解决分布式事务问题
    Spring Boot集成Seata怎样解决分布式事务问题,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。seata 简介Seata 是 阿里巴巴2019年开源的分布式事务解...
    99+
    2023-06-05
  • redis集群调用incr问题怎么解决
    在Redis集群中,调用incr命令可能会遇到以下问题: 在Redis集群中,每个节点只负责一部分数据的存储,当调用incr命令时...
    99+
    2023-10-25
    redis
  • redis集群多机房问题怎么解决
    解决Redis集群跨多个机房的问题可以采取以下几种方式:1. 多个机房内部各自部署独立的Redis集群:在每个机房内部独立部署Red...
    99+
    2023-09-06
    redis
  • MySQL字符集编码问题怎么解决
    本文小编为大家详细介绍“MySQL字符集编码问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySQL字符集编码问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。方法1:在创建数据库时,指定字...
    99+
    2023-07-06
  • mongodb副本集同步问题怎么解决
    解决MongoDB副本集同步问题可以通过以下几种方式:1. 检查网络连接:确保主节点和副本节点之间的网络连接良好,避免网络问题导致同...
    99+
    2023-08-24
    mongodb
  • 怎么解决flock php锁不成功问题
    本篇内容主要讲解“怎么解决flock php锁不成功问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么解决flock php锁不成功问题”吧!flock php锁不成功是因为在isRunni...
    99+
    2023-06-25
  • MySQL字符集出错的问题怎么解决
    本篇内容主要讲解“MySQL字符集出错的问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL字符集出错的问题怎么解决”吧!  实例讲解...
    99+
    2022-10-18
  • mongodb集群数据冗余问题怎么解决
    在MongoDB集群中,可以采取以下几种方式解决数据冗余问题:1. 副本集(Replica Set):副本集是MongoDB的一种高...
    99+
    2023-09-05
    mongodb
  • 试用cdn网站出现问题怎么解决
    如果在使用CDN网站时出现问题,可以尝试以下解决方法:1. 检查网络连接:首先确认自己的网络连接是否正常,可以尝试刷新页面或者尝试访...
    99+
    2023-09-16
    cdn
  • zookeeper集群奇偶数节点问题怎么解决
    zookeeper集群奇偶数节点问题怎么解决,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、运行模式Zookeeper 有三种运行模式:单机模式、伪集群模式和...
    99+
    2023-06-02
  • ElasticSearch突然采集不到日志问题怎么解决
    本篇内容介绍了“ElasticSearch突然采集不到日志问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!0-前言组内同学反馈,k...
    99+
    2023-07-06
  • Dubbo retries超时重试机制的问题怎么解决
    本篇内容主要讲解“Dubbo retries超时重试机制的问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Dubbo retries超时重试机制的问题怎么解决”吧!...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作