.net core + xunit 集成测试
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 集成测试的更多相关文章
- Net6 Xunit 集成测试
对于单元测试.集成测试大部分开发的朋友都懒得去写,因为这要耗费精力去设计去开发,做完项目模块直接postman 调用测试(当然这是一个选择,开发也中经常用到),但是如果测试需要多样化数据,各种场景模拟 ...
- 在 .Net Core xUnit test 项目中使用配置文件
在对项目做集成测试的时候,经常会需要用到一些参数比如用户名密码等,这些参数不宜放在测试代码中.本文介绍一种方法:使用配置文件. 添加配置文件 在集成测试项目目录下新建文件:Configuration. ...
- 学习 ASP.NET Core 2.1:集成测试中使用 WebApplicationFactory
WebApplicationFactory 是 ASP.NET Core 2.1 新特性 MVC functional test infrastructure 中带来的新东东,它封装了 TestSer ...
- .NET Core系列 :4 测试
2016.6.27 微软已经正式发布了.NET Core 1.0 RTM,但是工具链还是预览版,同样的大量的开源测试库也都是至少发布了Alpha测试版支持.NET Core, 这篇文章 The Sta ...
- 好代码是管出来的——.Net Core中的单元测试与代码覆盖率
测试对于软件来说,是保证其质量的一个重要过程,而测试又分为很多种,单元测试.集成测试.系统测试.压力测试等等,不同的测试的测试粒度和测试目标也不同,如单元测试关注每一行代码,集成测试关注的是多个模块是 ...
- 如何使用ASP.NET Core、EF Core、ABP(ASP.NET Boilerplate)创建分层的Web应用程序(第一部分)
本文是为了学习ABP的使用,是翻译ABP官方文档的一篇实战教程,我暂时是优先翻译自己感兴趣或者比较想学习的部分,后续有时间希望能将ABP系列翻译出来,除了自己能学习外,有可能的话希望帮助一些英文阅读能 ...
- 学习笔记之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 ...
- 2020中国.NET开发者峰会近50场热点技术专题揭秘
简介 / Summary 2014年微软组织并成立.NET基金会,微软在成为主要的开源参与者的道路上又前进了一步.2014年以来已经有众多知名公司加入.NET基金会,微软,Google,AWS三大云厂 ...
- Asp.Net Core 轻松学-利用xUnit进行主机级别的网络集成测试
前言 在开发 Asp.Net Core 应用程序的过程中,我们常常需要对业务代码编写单元测试,这种方法既快速又有效,利用单元测试做代码覆盖测试,也是非常必要的事情:但是,但我们需要对系统进行集 ...
随机推荐
- [個人紀錄] git 疑難排解
1.git pull 時發生錯誤,要拉下來的檔案內含有檔名太長的檔案 ans: https://stackoverflow.com/questions/22575662/filename-too-lo ...
- PIE SDK 多数据源的复合数据集加载
1. 功能简介 GIS遥感图像数据复合是将多种遥感图像数据融合成一种新的图像数据的技术,是目前遥感应用分析的前沿,PIESDK通过复合数据技术可以将多幅幅影像数据集(多光谱和全色数据)组合成一幅多波段 ...
- Python 查看模块的帮助文档,方法和帮助信息
参考链接:https://blog.csdn.net/u013810296/article/details/55509284 这里介绍下python自带的查看帮助功能,可以在编程时不中断地迅速找到所需 ...
- gulp教程、gulp-less安装
gulp教程之gulp-less gulp详细入门教程 11.1.安装nodejs: 11.2.新建package.json文件:cnpm init 11.3.全局和本地安装gulp: cnpm in ...
- android 调试崩溃Unable to instantiate application的解决方法
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.***.plants, PID: 23100 ...
- 简要分析一下java中线程的生命周期
面试题:您了解线程吗?简单叙述一下线程的生命周期? 答:之前学过一些有关于线程方面的知识,并且在编写代码的过程中还是要经常考虑线程,所以,我对线程还是了解一点的. 首先,创建一个线程,线程进入初始状态 ...
- Django rest framework ---- 权限
Django rest framework ---- 权限 添加权限 api/utils文件夹下新建premission.py文件,代码如下: message是当没有权限时,提示的信息 # FileN ...
- ajax+vue简单使用
<script type="text/javascript" src="http://cdn.bootcss.com/vue/2.2.2/vue.min.js&qu ...
- DF1协议常用命令
PCCC:Programmable Controller Communication Commands. AB PLC常用指令 根据http://www.iatips.com/pccc_tips.ht ...
- 注意力机制---Attention、local Attention、self Attention、Hierarchical attention
一.编码-解码架构 目的:解决语音识别.机器翻译.知识问答等输出输入序列长度不相等的任务. C是输入的一个表达(representation),包含了输入序列的有效信息. 它可能是一个向量,也可能是一 ...