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. NIO ByteBuffer的allocate与allocateDirect区别(HeapByteBuffer与DirectByteBuffer的区别)

    在Java中当我们要对数据进行更底层的操作时,一般是操作数据的字节(byte)形式,这时经常会用到ByteBuffer这样一个类. ByteBuffer提供了两种静态实例方式: public stat ...

  2. 12、Render函数

    1.什么是Render函数 Vue 推荐在绝大多数情况下使用模板来创建你的 HTML.然而在一些场景中,你真的需要 JavaScript 的完全编程的能力.这时你可以用渲染函数,它比模板更接近编译器. ...

  3. 在ASP.NET Web API 2中使用Owin基于Token令牌的身份验证

    基于令牌的身份验证 基于令牌的身份验证主要区别于以前常用的常用的基于cookie的身份验证,基于cookie的身份验证在B/S架构中使用比较多,但是在Web Api中因其特殊性,基于cookie的身份 ...

  4. 如何写出优雅的 Golang 代码

    原文: https://draveness.me/golang-101.html Go 语言是一门简单.易学的编程语言,对于有编程背景的工程师来说,学习 Go 语言并写出能够运行的代码并不是一件困难的 ...

  5. 160--Intersection Of Two Linked List

    public class IntersectionOfTwoLinkedList { /* 解法一:暴力遍历求交点. 时间复杂度:O(m*n) 空间复杂度:O(1) */ public ListNod ...

  6. C# Net 合并int集合为字符串,如:输入1,2,3,4,8 输出1~4,8

    C# Net 合并int集合为字符串,如:输入1,2,3,4,8 输出1~4,8 粘贴代码使用: /// <summary> /// 合并int集合,如1,2,3,4,8 输出1~4,8 ...

  7. Ingress-Nginx

    注意:  本文只用的ingress-nginx版本为0.24.1,可在官方网站自行下载 https://github.com/kubernetes/ingress-nginx 一.Ingress-Ng ...

  8. javascript之DOM(二Document对象)

    javascript通过Document类型来表示文档.在浏览器中document是HTMLDocument对象(继承自Document)的一个实例,表示整个html页面.而且在浏览器中documen ...

  9. SpringCloud2.0 Hystrix Feign 基于Feign实现断路器

    原文:https://www.cnblogs.com/songlu/p/9968953.html 1.启动[服务中心]集群,工程名:springcloud-eureka-server 参考 Sprin ...

  10. 查询接口---flask+python+mysql

    环境准备 安装flask pip install  flask 项目结构如图 1.新建配置文件conf.py #!/usr/bin/python# -*- coding:utf-8 -*- impor ...