上一页 1 ··· 13 14 15 16 17 18 19 20 21 ··· 33 下一页
摘要: Moq在.net中比较出名的mock框架,NSubstitute也是属于这类框架,使用方式也如出一辙,是通过实现子类来达到mock的效果。下面的测试方法都是按照 UnitTest的三板斧Arrange Act Assert来展开的,代码具体如下。 using Microsoft.VisualBasi 阅读全文
posted @ 2022-02-05 15:36 刘靖凯 阅读(72) 评论(0) 推荐(0) 编辑
摘要: 创建一个控制台项目,.net5或.net6(Preview),在Program.cs中写如下代码,F5,能顺利跑起来,没有Program类,没有Main函数。 这是C#9带来的顶级语句的功能。 System.Console.WriteLine("你好,C#"); 其实这里的Program类和Main 阅读全文
posted @ 2022-02-05 15:32 刘靖凯 阅读(69) 评论(0) 推荐(0) 编辑
摘要: 如果想在一个项目中,用DapperPlus支持多种数据库该怎么做? 在《让Dapper支持Mock》中我们定义了DapperPlus,可以基于这个类,实现两个子类:MySqlDapperPlus,MsSqlDapperPls,在这两个子类的构造中适配对应的数据库类型,从注放容器中,获取IDbConn 阅读全文
posted @ 2022-02-05 15:27 刘靖凯 阅读(267) 评论(0) 推荐(0) 编辑
摘要: 在上一篇说了封闭Dapper扩展方法为一个接口来支持Mock,接下来看看如何实现读写分离。 其实定义两个接口,一个用来实现读,一个用来实现写。在读的接口里只有Query的方法,在写的接口里实现Query和Execute全量(通读写的库也是支持读的,有的场景还是必须在写库里读,因为写库往读库中同步时是 阅读全文
posted @ 2022-02-05 15:20 刘靖凯 阅读(78) 评论(0) 推荐(0) 编辑
摘要: Dapper,在.net的ORM中占有一席之地,用法简单,灵活,使用如下。但也带来一个问题,就是在单元测试时,Mock比较难办。 public List<Goods> GetAllGoods() { using var con = new SqlConnection(); var sql = "se 阅读全文
posted @ 2022-02-05 15:15 刘靖凯 阅读(51) 评论(0) 推荐(0) 编辑
摘要: 我们知道,在c#中,如果两个类型没有继承关系 ,是不能相互值赋的,但有两个关键字implicit和explicit,可以让 Date date = DateTime.Now这样的赋值成为可能。 注:c#是没有Date类型的,但DateTime有Date属性 DateTime.Date,但这个属性本质 阅读全文
posted @ 2022-02-05 15:11 刘靖凯 阅读(35) 评论(0) 推荐(0) 编辑
摘要: 当我们用nuget引用三方库时,在类型,或类型成员上会有注释,如下图,是MySql官方包,command的ExecuteNonQuery的注释 我们自己写一个类库项目CommentsLibrary,给类,构造函数,方法添加xml注释,然后生成 using System; namespace Comm 阅读全文
posted @ 2022-02-05 15:03 刘靖凯 阅读(26) 评论(0) 推荐(0) 编辑
摘要: 前情提要:因为项目特点,需要在自己的服务器上集成测试,而不是用github的DevOpt体系;再有就是服务器是windows的;项目仓库在github上;并且项目是asp.net core的项目;开发人员一枚。以前的做法就是发布后,把执行码复制在服务器上启动;后来就是在服务器写了个bat,运行bat 阅读全文
posted @ 2022-02-05 14:55 刘靖凯 阅读(63) 评论(0) 推荐(0) 编辑
摘要: 在使用visual studio开发过程中,有时发现在“错误列表”中的一些提示,大体分为错误、警告、消息,错误是我们必须处理的,否则代码通过编译,警告有时常常会被忽略(也许你是细心人,会处理掉),有时,这样的忽略会为应用埋下安全的隐患。 其实这些提示,是来自微软的IDE的Security Code 阅读全文
posted @ 2022-02-05 14:49 刘靖凯 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 大部分主流语言都支持web框架,并且实现起来相对轻便,简捷,比如: go的gin包 package main import "github.com/gin-gonic/gin" func main() { r := gin.Default() r.GET("/ping", func(c *gin.C 阅读全文
posted @ 2022-02-04 17:07 刘靖凯 阅读(113) 评论(0) 推荐(0) 编辑
上一页 1 ··· 13 14 15 16 17 18 19 20 21 ··· 33 下一页