当前位置: 首页 > news >正文

丹阳网站建设报价亚马逊服务器永久免费

丹阳网站建设报价,亚马逊服务器永久免费,wordpress单点登录,花都网站建设哪家好前言上次#xff0c;我们介绍了因为DTO的“不变性”#xff0c;应该用record来定义DTO。今天#xff0c;我们来说明用record来定义DTO的另一个好处。问题首先#xff0c;我们实现一个Controler#xff0c;代码如下:[ApiController] [Route([controller])] pub… 前言上次我们介绍了因为DTO的“不变性”应该用record来定义DTO。今天我们来说明用record来定义DTO的另一个好处。问题首先我们实现一个Controler代码如下:[ApiController] [Route([controller])] public class UserController : ControllerBase {private readonly IMediator _mediator;public UserController(IMediator mediator){this._mediator  mediator;}[HttpGet({id})]public async TaskUserDto GetById(int id){var request  new GetUserByIdQuery { Id  id };var result  await this._mediator.Send(request);return result;} }public class UserDto {public int Id { get; set; }public string Name{ get; set; } }public class GetUserByIdQuery : IRequestUserDto {public int Id { get; set; } } 这里IRequestT可以认为是DTO。然后我们编写测试用例[Fact] public async void Test1() {var mediatorMock  new MockIMediator();var request  new GetUserByIdQuery { Id  1};var expectedUser  new UserDto { Id  1, Name  My IO };mediatorMock.Setup(x  x.Send(request, default(CancellationToken))).Returns(Task.FromResult(expectedUser));var controller  new UserController(mediatorMock.Object);var result  await controller.GetById(1);Assert.Equal(expectedUser, result); } 我们Mock了IMediator期望它执行Send后返回expectedUser。看起来都没有问题但是测试执行失败调试代码可以看到传递的参数是正确的但是返回值是null这说明实际没有命中mediatorMock.Setup中的方法。这是为什么呢原因原因其实是x.Send(request, default(CancellationToken))表示必须完全匹配才能返回指定的结果但是request和GetById方法中创建的request其实是2个不同的实例.NET并不认为它们相等。虽然可以修改mediatorMock.Setup方法来修复测试。但对于我来说属性值完全相同的DTO应该就是相等的可以让类实现值相等性来解决public class GetUserByIdQuery : IRequestUserDto {public int Id { get; set; }public override bool Equals(object obj)  this.Equals(obj as GetUserByIdQuery);public bool Equals(GetUserByIdQuery p){if (p is null){return false;}if (Object.ReferenceEquals(this, p)){return true;}if (this.GetType() ! p.GetType()){return false;}return Id  p.Id;}public override int GetHashCode()  Id.GetHashCode(); } 但是为每个DTO重写Equals和GetHashCode也不是个事。record的相等性其实更简单的解决方法是修改定义如下public record GetUserByIdQuery : IRequestUserDto {public int Id { get; set; } } 你会发现测试通过了。这是因为record在设计上就具备创建具有值相等数据类型的能力编译器会自动生成样板代码结论在本文中我们介绍了通过使用record类型可以大大简化定义实现值相等性DTO的代码量。如果你觉得这篇文章对你有所启发请关注我的个人公众号”My IO“记住我
http://www.pierceye.com/news/799636/

相关文章:

  • 网站建设桂林永川网站建设公司
  • 英文网站设计制作wordpress搜索不到
  • 企业营销网站建设的基本步骤吉林省建设工程质量监督站网站
  • 现在用什么软件做网站北京工程设计公司排名
  • 烟台网站开发技术找人做网站服务器不是自己的怎么办
  • 网站样式下载pc网站建设的优势是什么
  • 网站是怎么建设的网页制作基础教程第2版葛艳玲答案
  • 企业做一个网站的费用网站设计专业需要什么
  • 昆山住房和城乡建设部网站网站开发用的工具
  • 广州优化网站建设网站建设是怎么赚钱
  • 公司建设网站公司系统软件开发培训机构
  • 小程序分销系统开发成熟的网站怎么做seo推广
  • 网站dns修改wordpress极简清新主题
  • 南京网站建设价位招商门户网站建设方案
  • 中学加强校园网站建设个人博客网站开发的原因
  • 网站域名管理中心广州市外贸网站建设企业
  • wordpress建站位置布吉网站建设价格
  • 网站域名正在维护中企业内网网站建设
  • 广西南宁官方网站企业wordpress和ueeshop
  • access数据库做网站自贸区注册公司有什么优势
  • 福州做网站公司企信网企业信用信息系统黑龙江
  • 网站建设先学什么保定徐水网站建设
  • 济南网站建设哪个好电商创业
  • 如何在年报网站上做遗失公告天津做企业网站公司
  • 嘉兴网站关键词排名网页制作与设计课程设计报告
  • 室内装饰网站模板网络营销的策略
  • 如何做网站充值58百度搜索引擎
  • 专门做衣服的网站有哪些广告公司名字怎么取
  • 亚马逊如何做折扣网站的营销在线3d建模网站
  • 深圳市seo网站设计dz做的网站容易收录吗