xunit地址:https://github.com/xunit/xunit

一、利用请求来测试接口,主要是测试webapi控制器方法

①添加xunit项目 ,然后引用我们的主项目,nuget:

Microsoft.AspNetCore.TestHost,

Microsoft.AspNetCore.Mvc.Testing(不然找不到接口地址),

Microsoft.NETCore.App,

Microsoft.AspNetCore.App ,

Microsoft.EntityFrameworkCore.InMemory   使用内存数据库进行测试

②在主项目中写几个测试接口

③测试项目中创建   TestServerFixture

  public class TestServerFixture : IDisposable
{
private readonly TestServer _testServer;
public HttpClient Client { get; } public TestServerFixture()
{
var bulild = new WebHostBuilder().UseStartup<Startup1>();
_testServer = new TestServer(bulild);
Client = _testServer.CreateClient();
}
public void Dispose()
{
Client.Dispose();
_testServer.Dispose();
}
}

然后创建 Startup1类跟主项目中保持一致。连接数据库的方式换成内存数据库,注:如果 有使用到IConfiguration,把路径写死成主项目的路径,然后得到IConfiguration

根据路径获取IConfiguration的方法:

//path 设置到住项目的路径即可
 IConfigurationBuilder builder = new ConfigurationBuilder()
.SetBasePath(path) ////Microsoft.Extensions.Configuration.FileExtensions
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);//Microsoft.Extensions.Configuration.Json AddJsonFile if (!string.IsNullOrWhiteSpace(environmentName))
{
builder = builder.AddJsonFile($"appsettings.{environmentName}.json", optional: true);
} builder = builder.AddEnvironmentVariables(); //Microsoft.Extensions.Configuration.EnvironmentVariables return builder.Build();

创建测试,运行就可以了:

授权的怎么调用:列如:接口使用的JWT授权

在两个启动文件中加入,两个都需要加

然后在测试的TestServerFixture 中添加头部信息

如果通过了授权:

二、测试仓储层代码,不走webapi,主要使用注入和解耦来实现依赖注入 ,需要引用:Autofac

创建DbFixture.cs来实现注入和数据库使用

  public class DbFixture
{
public IContainer Container { get; private set; } public DbFixture()
{
var builder = new ContainerBuilder();
//内存数据库
var option = new DbContextOptionsBuilder<MyDbContext>().UseInMemoryDatabase("My.D3").Options;
MyDbContext context = new MyDbContext(option); //InitializeDbForTests 初始化测试数据
new TestDataBuilder(context).Build(); builder.RegisterInstance(context).As<MyDbContext>();
//注入
Server.ContentRootPath = Path.GetFullPath(@"..\..\..\..\..\") + @"src\My.D3";
IConfigurationRoot configuration = AppConfigurationHelper.Get(Server.ContentRootPath);
builder.RegisterType<SimpleDbContextProvider<MyDbContext>>().As<IDbContextProvider<MyDbContext>>().InstancePerLifetimeScope();
var assemblysServices = Assembly.Load("My.D3.Application");
builder.RegisterAssemblyTypes(assemblysServices).AsImplementedInterfaces();
builder.RegisterAssemblyTypes(typeof(DbFixture).GetTypeInfo().Assembly); Container = builder.Build();
}
}

测试仓储层案列:

 /// <summary>
/// 集成测试 测试appservice层接口
/// </summary>
public class Test2_Test : IClassFixture<DbFixture>
{ private readonly IEnumAppService _enumAppService; public Test2_Test(DbFixture fixture)
{
this._enumAppService = fixture.Container.Resolve<IEnumAppService>();
} /// <summary>
/// 测试
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
[Fact]
public async Task Test()
{
EnumInDto inDto = new EnumInDto()
{
EnumTypeName = "SexTypeEnum",
Module = "Demo"
};
var list = await _enumAppService.GetEnumArray(inDto);
string aa = "";
} }

这样就可以了,测试webapi和仓储层是不一样的,一般我们使用第一种集成测试就好了。

.net core + xunit 集成测试的更多相关文章

  1. Net6 Xunit 集成测试

    对于单元测试.集成测试大部分开发的朋友都懒得去写,因为这要耗费精力去设计去开发,做完项目模块直接postman 调用测试(当然这是一个选择,开发也中经常用到),但是如果测试需要多样化数据,各种场景模拟 ...

  2. 在 .Net Core xUnit test 项目中使用配置文件

    在对项目做集成测试的时候,经常会需要用到一些参数比如用户名密码等,这些参数不宜放在测试代码中.本文介绍一种方法:使用配置文件. 添加配置文件 在集成测试项目目录下新建文件:Configuration. ...

  3. 学习 ASP.NET Core 2.1:集成测试中使用 WebApplicationFactory

    WebApplicationFactory 是 ASP.NET Core 2.1 新特性 MVC functional test infrastructure 中带来的新东东,它封装了 TestSer ...

  4. .NET Core系列 :4 测试

    2016.6.27 微软已经正式发布了.NET Core 1.0 RTM,但是工具链还是预览版,同样的大量的开源测试库也都是至少发布了Alpha测试版支持.NET Core, 这篇文章 The Sta ...

  5. 好代码是管出来的——.Net Core中的单元测试与代码覆盖率

    测试对于软件来说,是保证其质量的一个重要过程,而测试又分为很多种,单元测试.集成测试.系统测试.压力测试等等,不同的测试的测试粒度和测试目标也不同,如单元测试关注每一行代码,集成测试关注的是多个模块是 ...

  6. 如何使用ASP.NET Core、EF Core、ABP(ASP.NET Boilerplate)创建分层的Web应用程序(第一部分)

    本文是为了学习ABP的使用,是翻译ABP官方文档的一篇实战教程,我暂时是优先翻译自己感兴趣或者比较想学习的部分,后续有时间希望能将ABP系列翻译出来,除了自己能学习外,有可能的话希望帮助一些英文阅读能 ...

  7. 学习笔记之Unit testing/Integration testing/dotnet test and xUnit

    source code https://github.com/haotang923/dotnet/tree/master/src Unit testing C# code in .NET Core u ...

  8. 2020中国.NET开发者峰会近50场热点技术专题揭秘

    简介 / Summary 2014年微软组织并成立.NET基金会,微软在成为主要的开源参与者的道路上又前进了一步.2014年以来已经有众多知名公司加入.NET基金会,微软,Google,AWS三大云厂 ...

  9. Asp.Net Core 轻松学-利用xUnit进行主机级别的网络集成测试

    前言     在开发 Asp.Net Core 应用程序的过程中,我们常常需要对业务代码编写单元测试,这种方法既快速又有效,利用单元测试做代码覆盖测试,也是非常必要的事情:但是,但我们需要对系统进行集 ...

随机推荐

  1. C# 文件监听类 FileSystemWatcher 属性

    属性: Path——这个属性告诉FileSystemWatcher它需要监控哪条路径.例如,如果我们将这个属性设为“C:Temp”,对象就监控那个目录发生的所有改变.IncludeSubDirecto ...

  2. Asp.NetCoreWebApi入门 - 从零开始新建api项目

    开发环境 打开VS,建立项目 项目结构 修改 StartUp 类代码 ConfigureServices方法 Configure方法 为开发环境和生产环境配置不同的 Startup 新建一个Contr ...

  3. 彻底搞懂B树、B+树、B*树、R 树

    出处:http://blog.csdn.net/v_JULY_v . 第一节.B树.B+树.B*树1.前言: 动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Ba ...

  4. English--比较结构

    English|比较结构 接下来让我们一起来透析,英语中的比较结构.各位同学,带上小板凳,要认真哦~ 前言 目前所有的文章思想格式都是:知识+情感. 知识:对于所有的知识点的描述.力求不含任何的自我感 ...

  5. cache verilog实现

    cache原理: https://www.cnblogs.com/mikewolf2002/p/10984976.html cache的verilog实现 实现的cache是16k, 4way组相连c ...

  6. Docker 的操作命令记录

    docker ps:列出正在运行的 container docker ps -a:列出所有的 container docker rm [containerid]:移除 container(可并列多个, ...

  7. 高性能的编程IO与NIO阻塞分析

    1.什么是阻塞,什么是非阻塞? 阻塞:结果返回之前,线程一直被挂起. 非阻塞:做一件事,尝试去做 2.传统IO模型 socket编程:

  8. flask 简单示例

    flask import flask from flask import jsonify from flask import request # 要获取到请求参数的话,就要导入这个模块 ''' 创建接 ...

  9. 团队第五次作业:alpha2成绩汇总

    一.作业题目 团队第五次作业:alpha2发布 二.作业评分标准 博客评分规则(总分100)博客要求 给出开头和团队成员列表(10') 给出发布地址以及安装手册(20') 给出测试报告(40') 给出 ...

  10. asp.net core mvc基于Redis实现分布式锁,C# WebApi接口防止高并发重复请求,分布式锁的接口幂等性实现

    使用背景:在使用app或者pc网页时,可能由于网络原因,api接口可能被前端调用一个接口重复2次的情况,但是请求内容是一样的.这样在同一个短暂的时间内,就会有两个相同请求,而程序只希望处理第一个请求, ...