首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【ASP.NET Core 基础知识】--测试--单元测试和集成测试

运行单元测试 ASP.NET Core 项目中,运行单元测试通常是通过测试运行器或者 .NET Core CLI 来实现。...1.3 使用Moq进行模拟和依赖注入 模拟对象 进行单元测试,使用 Moq 进行对象模拟是一种常见做法,特别是测试依赖注入情况下。Moq 可以帮助你模拟接口或虚方法,以便更容易地进行测试。...它们通常会返回预先定义好值或者固定行为,而不是模拟真实对象行为。 Fake 对象:Fake 对象是一个实现了真实对象相同接口,但实现方式更加简化对象。...TestServer 提供了一种方便方式模拟应用程序运行环境,并进行集成测试,而无需启动一个真实 Web 服务器。...通过这个示例,你可以编写一个集成测试测试 ASP.NET Core 应用程序行为,包括控制器、路由和中间件等。确保测试结束后及时清理测试数据,确保下次测试可以干净环境中运行

4700

Entity Framework Core 2.0 新特性

包含定义导航实体是所有者。当查询所有者,默认情况下将包含所有类型。 按照惯例,将为所属类型创建一个影子主键,并通过使用表分割将其映射到所有者相同表。...2.性能提升方面 2.1DbContext连接池 ASP.NET Core程序中我们使用EF Core一般都是将自定义DbContext类型注册到依赖注入系统中,然后通过控制器中构造函数参数获取该类型实例...这意味着每个请求创建一个新DbContext实例。 所以版本2.0中,我们引入了一种依赖注入中注册自定义DbContext类型方式,它透明地引入了一个可重用DbContext实例池。...一旦请求处理完成,实例上任何状态都将重置,并且实例本身返回到池中。 这在思想概念上类似于ADO.NET中连接池运作方式,并且能节省DbContext实例初始化成本。...这种新支持允许“安全”方式使用C#字符串插值。这样就可以防止在运行时动态构建SQL发生常见SQL注入攻击.

3.8K90
您找到你想要的搜索结果了吗?
是的
没有找到

ABP入门系列(11)——编写单元测试

Effort.EF6:对基于EF应用程序提供了一种便利方式来进行单元测试XUnit:.Net上好用测试框架。 Shouldly:断言框架,方便我们书写断言。 2.2....2.3. xUnit(.Net测试框架) xUnit专门.Net Framework打造一个免费开源单元测试工具。 同样,想对Xunit有更对了解,请直接访问xUnit 官方链接。...Shouldly(断言框架) Shouldly提供断言方式传统Assert相比更实用易懂。...构造函数中主要做了两件事,预置了初始数据和种子数据,并以默认租户Admin登录。 至此我们对abp我们默认创建测试项目有了一个大概认识。下面我们就开始实战阶段。 3. 单元测试实战 3.1....理清要测试方法逻辑 我们应用服务层TaskAppServiceCreateTask方法例,创建单元测试

1.6K80

从EFCore上下文使用到深入剖析DI生命周期最后实现自动属性注入

使用EF的话不可避免要和DbContext打交道,Core中常规用法一般是:创建一个XXXContext类继承自DbContext,实现一个拥有DbContextOptions参数构造器,启动类...但是,通过构造函数这种方式来获取上下文实例其实很不方便,比如在Attribute或者静态类中,又或者是系统启动初始化一些数据,更多是如下一种场景: public class BaseController...Asp.Net Core中,内置DI有3种服务模式,分别是Singleton、Transient、Scoped,Singleton服务实例是保存在root provider中,所以它才能做到全局单例...默认情况下,Asp.Net Core框架在创建HostBuilder时候会判定当前是否开发环境,开发环境下会开启这个验证: ? 所以前面那种关闭验证方式是错误。...Core设计时候每个请求创建独立Scope,这个Scopeprovider被封装在HttpContext.RequestServices中。

1.1K20

Blazor一个简单示例让我们来起飞

Blazor Blazor他是一个开源Web框架,不,这不是重点,重点是它可以使c#开发在浏览器上运行Web应用程序.它其实也简化了SPA开发过程....Blazor可以让.NET附有全栈开发功能,它可以使Web开发变得轻松而高效.而且Blazor是开源,它得到了社区大力支持,而且发展速度会很快....@page他定义了该页面的url,当然razor中也是这样,而且下最下面我通过HttpClient进行我们api调用,在这 System.Net.Http.Json这篇文章中我们也可以看到他简直就是为了我们...而且代码中最后一部分有一个@functions片段,它包含了页面所有的业务逻辑,我们页面初始化时我们通过OnInitializedAsync方法进行调用我们api然后将其进行填充赋值并填充到我们...,并且我们必须一直服务端保持连接才行.如果说切换到WebAssembly客户端版本,限制是完全不同,但是目前来说的话他首次需要下载一些运行时文件到浏览器中.

1.3K10

【半译】ASP.NET Core中创建内部使用作用域服务Quartz.NET宿主服务

上一篇文章中,我展示了如何使用ASP.NET Core创建Quartz.NET托管服务并使用它来按计划运行后台任务。...不幸是,由于Quartz.NET API工作方式Quartz作业中使用Scoped依赖项注入服务有些麻烦。说明下这篇文章部分采用机翻。...,但是执行我们请求IJob之前,我们从DI容器中解析了DbContext和消息总线服务。...但是,此处显示方法并不是在工作中使用范围服务唯一方法。马修·阿伯特(Matthew Abbot) 在这个文章中演示了一种方法,该方法旨在正确处理运行作业方式实现IJobFactory。...总结 本文中,我展示了如何创建中间层IJob,该中间层QuartzJobRunner调度程序需要执行作业创建。

1.8K10

Entity Framework Core 2.0 入门

// 创建测试项目 解决方案添加项目: dotnet sln add LearnEf.UI/LearnEf.UI.csproj dotnet sln add LearnEf.Domains/LearnEf.Domains.csproj...这里, 常规做法是, 针对开发数据库, 可以通过命令直接创建和更新数据库. 而针对生产环境, 最好是生成sql脚本, 然后由相关人员去执行这个脚本来完成数据库创建或者更新....解决方案里再建立一个asp.net core mvc项目: mkdir LearnEf.Web && cd LearnEf.Web dotnet new mvc 解决方案里添加该项目: dotnet.../LearnEf.Data/LearnEf.Data.csproj 测试项目添加该项目引用: cd ../*Tests dotnet add reference .....非常简单, 从log可以看到, 删除动作只用到了主键: 如果是删除离线model, 那么Remove方法首先会让Dbcontext追踪这个model, 然后设置状态Deleted.

3.1K80

Entity Framework Core 2.0 入门

// 创建测试项目 解决方案添加项目: dotnet sln add LearnEf.UI/LearnEf.UI.csproj dotnet sln add LearnEf.Domains/LearnEf.Domains.csproj...这里, 常规做法是, 针对开发数据库, 可以通过命令直接创建和更新数据库. 而针对生产环境, 最好是生成sql脚本, 然后由相关人员去执行这个脚本来完成数据库创建或者更新....解决方案里再建立一个asp.net core mvc项目: mkdir LearnEf.Web && cd LearnEf.Web dotnet new mvc 解决方案里添加该项目: dotnet.../LearnEf.Data/LearnEf.Data.csproj 测试项目添加该项目引用: cd ../*Tests dotnet add reference .....非常简单, 从log可以看到, 删除动作只用到了主键: 如果是删除离线model, 那么Remove方法首先会让Dbcontext追踪这个model, 然后设置状态Deleted.

3.5K140

【初学者指南】ASP.NET MVC 5中创建GridView

从对话框中跳转到 Web,选择 ASP.NET Web 应用程序项目,然后单击确定。 ? 模板中选择 MVC,如果编写了应用单元测试,请先做检查,并点击 OK。 我们工程都是用基本功能创建。...现在,控制器文件夹中添加一个名为 AssetController 控制器,这个控制器件将用于所有 Asset 相关工作。...我们案例里,我们将会每一个需求方式将其安装在 GridExampleMVC web 中,然后点击安装按钮。 ?...写控制器代码之前,我们需要为实体框架配置连接字符串,以便在操作数据库来连接数据库。因此,我们连接字符串应该被指定给一个有效数据源,以便我们在运行时应用不会被打断。...HTML 实现渲染代码,请检索行为创建一个模板(没有模型)视图,然后在其中添加如下代码: @model IEnumerable <div

6.1K90

迁移 appseting.json 创建自定义配置中心

自使用.NET Core框架以来,配置大多存在json文件中: 【框架默认加载配置】文件appseting.json 以及ppsettings.Environment.json, 【环境变量】存在...所以笔者创建一个自定义EFCore作为配置源配置中心去解决以上两个问题,并且把他封装成一个类库,可适用于多场景。...数据库切换 想要解决数据库切换问题,首先就是把配置构建从Program类中抽离出来,重新构建一个类去创建配置所用到IConfiguration,故我将配置初始写在静态方法中,通过传递连接字符串以及数据库类型方式去构建不同上下文...还记得我们最开始说:不修改原始IConfiguration读取方式情况下创建自定义配置中心,故他使用方式原始IConfiguration相差不大,只是加入了初始化步骤。...我们测试使用一段复杂json结构看能取到怎样节点数据。

1.1K40

.NET 5.NET Core使用EF Core 5连接MySQL数据库写入读取数据示例教程

本文首发于《.NET 5/.NET Core使用EF Core 5(Entity Framework Core)连接MySQL数据库写入/读取数据示例教程》 前言 .NET Core/.NET 5应用程序开发...而将.NET Core/.NET 5应用程序SQL Server数据库ORM组件有微软官方提供EF Core(Entity Framework Core),也有像SqlSugar这样第三方ORM...本文将为大家分享.NET Core/.NET 5应用程序中使用EF Core 5连接MySQL数据库方法和示例。...创建示例项目 使用Visual Studio 2019(当然,如果你喜欢使用VS Code也是没有问题,笔者还是更喜欢Visual Studio编辑器中编写.NET代码)创建一个基于.NET 5Web...); } } } } 访问地址:http://localhost:8166/api/people/create 来向MySQL数据库写入测试数据,返回结果

7.4K42

.NET 云原生架构师训练营(模块二 基础巩固 EF Core 介绍)--学习笔记

仓储 领域层和数据映射层之间,像一个内存级别的领域对象集合 领域业务单元测试提供替换点 集中数据库访问逻辑 ?...UnitOfWork 工作单元 一个工作单元一个事务范围内保留所有对数据库变更,在这个工作单元结束时候一次性提交所有改动到数据库 DB Context DB Set DB Context(UnitOfWork...工作单元) DB Set(Repository 仓储) EF Core 提供一个 DB Context 和多个 DB Set 组合完成数据查询和更新操作 ORM 框架 EF Core快速开始示例 创建一个...DbContext 完成数据查询插入 创建实体 Entity namespace LighterApi.Data { public class Entity { //...完成数据查询插入 初始化数据库 ,注意在初始化以前确保正确配置了连接字符串,并且startup.cs中添加了DbContext注入 // 安装dotnet tool ef工具 dotnet tool

79310

Entity Framework应用:使用Code First模式管理数据库创建和填充种子数据

一、管理数据库连接 1、使用配置文件管理连接之约定 在数据库上下文类中,如果我们只继承了无参数DbContext,并且配置文件中创建了和数据库上下文类同名连接字符串,那么EF会使用该连接字符串自动计算出数据库位置和数据库名...出现上面报错原因是因为数据库上下文发生了改变,现有数据库不匹配。解决方案: 1、把数据库里面的迁移记录表删掉或者重命名即可。 重新运行程序,结果如下: ?...这在开发周期早期阶段通常很有用(比如设计领域实体),从单元测试角度也很有用。...") { Database.SetInitializer(null); } 2、填充种子数据 到目前为止,无论我们选择哪种策略初始化数据库,生成数据库都是一个数据库...此外,开发阶段可能想admin资格其填充一些数据,或者为了测试应用在特定场景中表现如何,想要伪造一些数据。

1.2K20

Entity Framework 4.1 Code-First 学习笔记

(上下文需要派生自DbContext)中,会自动生成相应数据表。...我们将增加一个静态构造函数,这个静态构造函数对于整个应用程序域来说建立一个标准,当数据库上下文初始时候,检查数据库架构是否模型相符,如果不是的话,将删除数据库然后重新创建它。...默认情况下,将在你本地机器上,使用上下文对象名称,有许多方式来覆盖这个行为,最简单方式配置文件中增加一个名字上下文对象名称数据库连接串,我这里,叫做 MyDomainContext,还可以通过实现一个构造函数...这就是为什么需要标记你子实体集合属性 virtual 原因。...延迟加载:非常宽容,因为只需要时候加载数据,不需要预先计划;可能因为数据访问延迟而降低性能,考虑到每访问父实体子实体,就需要访问数据库。两种方式各有优缺点,该怎么选择呢?

1.6K10

ASP.Net Core 开发笔记

关于 dotNet core 中依赖注入和 IoC 可以参考 - ASP.NET Core中依赖注入(1):控制反转(IoC) 运行时 ASP.NET Core 应用启动读取ASPNETCORE_ENVIRONMENT...DbContextOnModelCreating(). 使用Unit of Work + Repository模式 Repository模式 为什么要使用Repository模式?...持久化技术无关. 易于测试. 代码重用. 依赖注入, 松耦合, DIP原则. DIP, 也就是SOLID里面的D, 高级别的模块不应该依赖于低级别的模块, 它们都应该依赖于抽象 ?...为什么要使用Unit of Work模式? DbContext已经实现了Unit of Work 和 Repository 模式. Controller等不应该直接使用DbContext....Uow 和 Repository模式 关系即: 工作单元服务于仓储,并在工作单元中初始化上下文,仓储单元提供上下文对象,由此确保同一上下文对象。

1.7K10

ASP.NET Core 依赖注入(DI)简介

这种方式,可以将复杂依赖关系图提供给类,而不需要任何硬编码对象构造。 除了创建具有依赖关系对象之外,容器通常会在应用程序中管理对象生命周期。...CharacterRepository类一起使用DI方式是您可以遵循所有应用程序服务一般模型,而不仅仅是“仓库”或数据访问类中。...依赖注入这种链式方式使用是不寻常,每个请求依赖依次请求自己依赖关系。 容器负责解析图中所有依赖关系,并返回完全解析服务。...注意: 一个单例中从容器中实例化一个声明周期Scoped服务,在这种情况下,处理后续请求,服务可能会处于不正确状态。 具有依赖关系服务应在容器中注册。...Singleton Singleton生命周期服务是第一次请求创建(或者当你指定实例时运行ConfigureServices),然后每个后续请求都将使用相同实例。

2.9K40

多线程下调用上下文 : CallContext

1:GetData、SetData FreeNamedDataSlot 测试代码很简单,就是主线程 和 子线程之中分别传递User对象实例,看看最后效果。...测试2:LogicalGetData、LogicalSetData FreeNamedDataSlot 测试代码如下: public void TestLogicalGetSetData() {...; 3、FreeNamedDataSlot清除当前线程数据槽后,之前已经运行子任务,不受影响; 测试3:LogicalGetData后修改传递数据 多线程环境下传递共享对象数据,如果某个线程通过...4、子线程中使用LogicalSetData改变数据槽值,不会影响父线程数据槽,即使他们key是同一个; 3 .NET Core下没有CallContext .NET Core下没有CallContext...如果你是将.NET Framework升级.NET Core,那么你可能需要自己实现一个CallContext类来代替之前CallContext: public static class CallContext

86420

Entity Framework复杂类型属性映射

当Code First发现不能推断出类主键,并且没有通过Data Annotations或Fluent API注册主键,那么该类型将被自动注册复杂类型。...出现上述错误原因是我们没有初始化 Address 类,其中一个(后面我会讲解另一个解决方法)解决方法是 new User(){} 内初始化 Address,修正后代码如下: using (var...,应该在实体构造函数中初始化复杂类型; 将制度属性添加到复杂类型中,需进行值检查; 尽量显式注册复杂类型。...所谓原始值就是从数据库查询出来值,当前值就是实体目前值。入口点是 DbContextEntry方法,返回对象类型是 DbEntityEntry 。...从上面的讲解我们卡一看到,用复杂类型很双,一直用一直爽,但是复杂类型还是有他限制: 不能共享引用:因为没有主键标识,不能被自身实例之外任何对象引用; 没有优雅方式标识引用:即使查询出数据

65910

Entity Framework Core 简介

下面列举一下 EF Core 所支持项目类型: 运行在 .NET Core 平台上 Asp.Net Core MVC/Web Api、Console、etc ; 运行在 .NET 4.5+ 版本上...ASP.NET MVC/Web Api 、WinForm、Console、WinForm、WPF ; UWP 平台相关应用 ; 安卓、IOS、Windows 移动平台上运行应用。...零、EF Core 开发方法 EF Core 只支持两种开发方式 Code First 和 Database First, EF Core 2.0 开始不支持数据库模型可视化设计器以及数据库设计导航...一、EF Core EF6 这里列一下 EF Core 目前所具有的 EF6 功能 DbContext ; DbSet ; Data Model ; 使用Linq-to-Entities查询 ;...; TPC ; 多对多关系 ; Entity Splitting ; Spatial Data ; 延迟加载 ; 使用DbContext进行存储过程映射进行CUD操作 ; 种子数据 ; 自动迁移 。

1.9K10
领券