DotNetCore跨平台~xUnit和测试报告】的更多相关文章

在进入dotnet core时代之后,测试驱动开发TDD的主要工具不再是微软的nunit,取而代之的是更通用的xunit,微软把它集成到了dotnetcore的项目里,在安装完成vs2017之后,你可以很容易的建立一个xunit单元测试项目,并且我们的dotnet宿主命令也有对它的支持,当然你在进行CI持续集成时可以使用jenkins里的xunit插件,不过对于原生的工具dotnet test来说,有时候感觉更让人喜欢! 从一个很简单的断言开始 [Fact] public void Test2(…
在CI/CD流行至极的今天,你的项目没有自动化测试绝对是不可以接受的,在进行自动化部署和持续集成时,我们的dotnet core项目也是可以实现自动化的,之前说过gitlab,jenkins对持续集成的影响,而今天说一下微观点的概念,“单元测试”,这个早已不是什么新东西了,像dotnet平台也有自己的测试工具,不过在进入core平台之后,大叔还是推荐大家使用xunit工具,这个工具可以帮助我们升级测试报告,以XML文件存在! 1 相关nuget包 可以通过查看项目的csproj文件获得代码 <P…
本索引目录主要包括仓储大叔对dotnet core架构的研究与知识积累,从2016年开始进行撰写,到今天已经有一年多了,其中有一些小知识,小技巧,小应用,希望给大家在开发时一些启发,也希望dotnet core越来越好,希望2.0正式版快点出来! DotNetCore跨平台目录 DotNetCore跨平台~Startup类的介绍(2016-05-31 16:25) Linux~centos上安装.netcore,HelloWorld归来!(2016-09-05 13:25) .NetCore~框…
之前写过一篇文件<DotNetCore跨平台~Quartz热部署的福音-监控文件夹的变化>,今天主要把框架优化了一下,支持外部触发,并支持外部将参数以JobDataMap形式进行输入,然后在咱们的Job里进行使用它,故称参数化任务. Quartz使用场景: 定时单次任务:在未来某个时间去执行一次 定点任务 :在某个时间去执行,可以是轮询的 周期任务 :按某个时间间隔去轮询执行 今天说的外部触发的任务是指第一种,即在未来某个时间点去执行,并且只执行一次.说一下思路,这种任务某个JobBase的子…
回到目录 Dapper作为小型ORM的代表作品被我们应用到了dotnet core的项目中,下面将把自己在项目中使用dapper进行curd操作的过程写一下,后期可能会遇到一些问题,大叔也会在这个系列之中进行完善,希望对各位学生有所帮助! 一 安装nuget的dapper包包 二 在startup中注册dapper仓储,并现时注册数据库类型和数据库连接串,因为在mysql和sqlserver中,它们的连接串是不同的,模块化设计请看大叔这篇文章 <DotNetCore跨平台~组件化时代来了> s…
回到目录 在进行.net core平台之后,我们如果希望在请求过程中添加一些事件是非常容易的,你可以把这些事件做成一个中间件Middleware,然后这些中间件就会以Http pipeline的管道方式进行相应,并且它们就像是一个职责链,从你定义的第一个中间件开始,一个一个向下传递,直到最后一个中间件完成为止! 前几天我写了在.net core里实现模块化服务,DotNetCore跨平台~组件化时代来了主要是将我们定义的组件添加到IServiceCollection集合里,然后在程序启动后去注册…
DotNetCore跨平台~System.DrawingCore部署Linux需要注意的   https://www.bbsmax.com/A/QV5ZemYVJy/?tdsourcetag=s_pcqq_aiomsg 你在windows上使用图像组件没有任务问题,但部署到linux之后,将注意以下几点: 安装nuget包ZKWeb.System.Drawing 项目里还是引用System.DrawingCore,这点不用改 安装gdiplus插件,这个需要根据linux类型不同,有不同的方法,…
新宠儿 DotNetCore是.net5.0版本,之所以不叫.net5.0为的就是不让我们把它与前面的.net混为一淡,它将是真正意义的跨平台开发语言,在网上也有相关介绍,中国的一些大牛也发了相关文章,像张善友大牛也发了几个文章,来介绍.NetCore,这段时间,大叔将会一步一步说说这个跨平台的新宠儿! 重新起名了 ASP.NET 5 –> ASP.NET Core 1.0 .NET Core 5 –> .NET Core 1.0 Entity Framework 7 –> Entity…
回到目录 之前写了关于自动化测试的相关文章,包括gitlab,unittest,jenkins pipeline等,基于都是功能点的测试,当我们的框架或者业务修改之后,需要走一篇自动化测试,以此来保证我们的修改过的功能是正确的,而今天主要说一下流程测试,从api网站的入口,从一个请求开始到结束这个过程,我们可以通过TestHost来完成! 一个完整的流程化测试需要经过以下几个步骤: 建立xunit项目 引用需要测试的api项目 添加WebFixture拦截器,注意其中的startup是指api项…
使用dotnetCore发布站点后,它的处理请求能力不逊色IIS等大型服务的能力,号称每秒能处理115万个请求,太牛X了也. 先看看它支持的数据库 以下主流数据库都是为支持的 Microsoft SQL Server SQLite Npgsql (PostgreSQL) MySQL Microsoft SQL Server Compact Edition IBM Data Servers InMemory (for testing) 再看看老外测试出来的结果 ASP.NET Core – 230…
回到目录 这几天对PS情有独忠,被它的强大功能所希引,它可以快速部署,快速发布,将一些连带的动作一次的完成,挺方便,类似于早期的bat文件,也像linux平台的bash脚本,但功能上,比前两者都要强很多,下面我们看一下将某个解决方案下的所有项目一次publish的过程,我们使用ps脚本来实现的. # 作者:仓储大叔 # 功能:发布项目到指定的地方 Param([string] $rootPath) $scriptPath = Split-Path $script:MyInvocation.MyC…
在DotNetCore出来之后,同时也使用了quartz进行调度中心的设计,将它做到docker里方便部署,在之前的quartz版本里支持配置文件的方式,而现在不支持了,我们应该去想一下,为什么不去支持配置文件?当然大叔也为配置文件设计了支持的方式,但我们还是应该想想作者为什么不去支持配置? 热支持,服务发现? 和上面两个概念可能有点关系,热插拔很容易理解,就是把dll模块放到正在运行的项目时,它可以直接启动,这个功能对调度中心来说,很是必要,因为你可能需要按着不同的功能设计一些服务job,而这…
问题的产生的背景 由于我们使用了jenkins进行部署(jenkins~集群分发功能和职责处理),而对于.net core项目来说又是跨平台的,所以对它的项目拉取,包的还原,项目的编译和项目的发布都是在一台linux的jenkins节点上进行的,而我们开发时是在windows系统,所以在进行还原和编译时出现了一些问题,今天的文章主要是解决这些问题的. .net frameworks时代 我们在.net时代有包管理工具nuget,并且已经知道了它的好处,类似于nodejs的npm,帮助我们管理项目…
写这篇文章的心情:激动 Microsoft.Extensions.DependencyInjection在github上同样是开源的,它在dotnetcore里被广泛的使用,比起之前的autofac,unity来说,它可以说是个包裹,或者叫适配器,它自己提供了默认的DI实现,同时也支持第三方的IOC容器,在这段时间里使用了它,就想,这东西为什么被在dotnetcore里大放异彩?为什么会全程使用它?从程序的开始到程序启动起来,你可以发现它无处不在,在框架里是这样,在业务层同时也是这样. 聊聊Mi…
回到目录 DotNetCore里一切都是依赖注入的,对于appsettings这个可扩展的配置对象也不例外,它位于项目根目录,一般在startup里去注册它,在类中通过构造方法注入来获取当前的对象,以便去使用它,当然我们也可以自己去构建和使用它,下面我就来总结一下. 传统方法,startup注入,构造方法使用 1 注意配置类 public class RedisConfiguration { #region 属性成员 /// <summary> /// 文件上传路径 /// </summ…
回到目录 对于DotNetCore来说,把大部分组件者放在DI容器里,在startup中进行注入,在类的构造方法中进行使用,如果某些情况下,无法使用这种DI的方式,也可以自己控制数据上下文的生产过程,下面说一下. 一 标准注入+构造方法使用 数据上下文的定义,带参数的构造方法,注意他和使用什么类型的数据库没有关系,只是单纯的上下文 public partial class ErpContext : DbContext, IERPContext { public ErpContext(DbCont…
回到目录 进行dotnetcore之后,各种对象都是基于DI进行生产的,这就有了对象的生命周期一说,早在autofac里也有相关知识点,这与Microsoft.Extensions.DependencyInjection是完全温和的,方便大家理解,在讲今天的组件化之前,先对DI的三种生命周期进行理解一下: AddSingleton:单例,进程内它是唯一的 AddTransient:瞬息,在对象在当前环境内,作用域内是唯一的 AddScoped:请求,对象在一个HTTP请求内是唯一的 下面来看今天…
回到目录 在使用autofac这个DI工具时,我们一般使用的是构造方法注入,而dotnetcore的标准框架里也集成了构造方法注入,而属性注入在一些场景下,表现的更为灵活,像java的spring框架里就有@Autowired注解来实现属性的注入,而autofac这个框架也提示了属性自动注入的方式(PropertiesAutowired). 下面准备dao和bll层代码,bll对dao层有引用 public class UserRepository { public int GetUserId(…
理论闲话 之前在.netFramework平台用的好好的,可升级到.net core平台之后,由于不再需要二进制序列化,导致咱们的事件机制遇到了问题,之前大叔的事件一直是将处理程序序列化后进行存储的,处理存储的参数为事件源,一个事件源可以由多个处理程序订阅,当事件源被发布时,这些被序列化的代码段会被回调执行,这是大叔之前的思路,在RedisBus和MemoryBus里已经得到了实现,读过大叔源代码的同学应该有所了解了. 事件源和处理程序 /// <summary> /// 事件源 /// &l…
回到目录 大叔感觉网上对Dockerfile的说明不是很清楚,或者说怎么去用说的不清楚,在vs2017里我们可以去建立自己的Dockerfile文件,然后你的项目可以被生成一个镜像,把它推到仓库之后,你可以在linux,mac上去run你的项目了!听着很爽,但过程确实有些坑! Dockerfile里的解答 From  基础依赖镜像 ARG 输入一个参数,这里指你Dockerfile所在的目录 EXPOSE 对外开放的端口 COPY ${source:-bin/publish} ./hello 把…
回到目录 在.net frameworks的ef里连接mysql我们已经测试通过了,而在dotnet core里的efCore上去连接mysql我们需要测试一下,并且在测试过程中出现了一些问题,当然最后也是解决了,下面总结一下,分享给大家! mysql项目的依赖包 数据上下文和连接串 数据仓储 添加模块扩展 业务层注入 业务实现 mysql项目的依赖包 Microsoft.EntityFrameworkCore MySql.Data.EntityFrameworkCore 数据上下文和连接串 对…
回到目录 新建console项目之后,编译程序出现以下错误: Can not find runtime target for framework '.NETCoreAPP, Version=v1.0' compatible with one of the target runtimes: 'win10-x64, win81-x64, win8-x64, win7-x64'. Possible causes:        The project has not been restored or…
回到目录 古人云<一山不容二虎>,而进行dotnet core时代之后,我们可以看到这样的一些官方的DEMO,它将数据连接串和其它配置项都直接硬编码在代码里,即在startup中进行定义,试问你在生产环境如何兼容!当然,你会说,可以在对应appsettings里进行配置,说它是对应的appsettings,是因为dotnet core下的配置文件有环境的区分,一般使用以下名称来表示不同的环境: 开发环境,Development 预发布环境,Staging 生产环境,Production 对于二…
回到目录 当我们进行软件开发时,一般会写单元测试,而对于业务情景来说,一般是测试它的业务逻辑准确性,对于你的测试数据是否来自数据库还是文件,是否为真实还是模拟,并不是很关心!我关心的就是我的业务逻辑是否正确! 所以我们的单元测试在调用底层接口时,尤其是数据持久层的接口时,一般可以使用mock的方式,即模拟一个接口,期望的参数和期望的结果就够了,而没有必要真正去连接数据库,事实上,在业务测试里,使用真实的数据库没有什么意义!无非是加大测试的复杂度! 一个不错的mock测试工具 Moq,它在nuge…
回到目录 单元测试大叔认为有几下两个必要的作用,也是为什么要上单元测试的原因 组件,框架在修改和BUG解决后,进行正确性的测试,然后才能打包 业务模块,主要提现在进行业务规则的模拟上面,保证了业务逻辑的准确 目前添加了组件正确性的测试,在组件进行升级和优化之后,需要走一篇测试流程,以它的正确! 有条件的同学,可以在自己的源代码管理上添加pipeline,在你的新项目修改迁入后,让它自动进行测试,这样也可以保证项目的质量! 这应该也是TDD开发的初忠吧! 回到目录…
回到目录 你在windows上使用图像组件没有任务问题,但部署到linux之后,将注意以下几点: 安装nuget包ZKWeb.System.Drawing 项目里还是引用System.DrawingCore,这点不用改 安装gdiplus插件,这个需要根据linux类型不同,有不同的方法,大叔做了一下总结 安装gdiplugs的方法 大叔总结的方法ubuntu && debian sudo apt-get install libgdiplus cd /usr/lib sudo ln -s…
回到目录 Json动态序列化属性,主要为了解决一个大实体,在返回前端时根据需要去序列化,如果实体里的某个属性在任务情况下都不序列化,可以添加[JsonIgnore]特性,这种是全局的过滤,但是更多的情况下我们需要的是,按着某种场景去序列化某些属性,下面举例说明. 两种场景,B2C场景和C2C场景,它们需要让PeopleDTO这个实体返回的内容不一样,前者返回Name和Email,而后者只返回Name,这时我们的JsonIgnore不能满足,所以需要从新开发一种新的模式. 笨方法:为不同的场景写不…
回到目录 提前1个多月把2.0发布出来了,小微真的把持不住了,哈哈! windows上安装 http://mp.weixin.qq.com/s/ueJdhaBBCHga0sQlVD6YiQ https://github.com/dotnet/core/blob/master/release-notes/download-archives/2.0.0-download.md centos上安装 https://www.microsoft.com/net/core/#linuxcentos 打开gi…
回到目录 对于传统的nuget包,我们习惯上用官方或者大型组织的,因为它们比较考靠谱,但就在前两天.net core2.0发布后,我把efcore也升级到2.0了,mysql.EfCore也升级到支持2.0的最新版了,然后奇葩的事情发生了,EF用不了了! Mysql和EF的包包信息 Microsoft.EntityFrameworkCore 2.0.0 MySql.Data.EntityFrameworkCore  8.0.8-dmr 上面两个大包包都是官方的,微软的EF和Oracle的MySq…
回到目录 对于dotnet Core来说,依赖注入的集成无疑是最大的亮点,它主要用在服务注册与注入和配置文件注册与注入上面,我们一般会在程序入口先注册服务或者文件,然后在需要的地方使用注入即可,下面主要介绍一下实体配置和集合配置的方式. 看一下配置文件代码段 "JobConfig": [ { "JobTypeDll": "TaskServicePool", "JobTypeFullName": "TaskServic…