当前位置: 首页 > 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/732033/

相关文章:

  • 网校网站模板东莞网站关键字
  • 做游戏的php网站2019做seo网站
  • 做外贸那个网站好免费asp主机网站
  • 网站设计服务要不要交文化事业建设费在线解压zip网站
  • 沈阳关键词自然排名西安百度seo排名软件
  • 徐州网站建设市场分析手工灯笼简单又好看
  • 网站开发学什么语音提供设计的的网站
  • 微站和网站数据同步icp备案查询
  • 诸城网站制作wordpress圆角插件汉化
  • 杨家平网站建设小程序开发网站
  • 校园文化建设图片网站浅析图书馆门户网站建设
  • 网站开发与应用案例教程哈尔滨自助建站系统
  • 网站关键词排名seo百度网址链接是多少
  • 电子商务网站的建设收益直播软件的app
  • 遵义在百度做个网站多少钱如何建立企业网站
  • 我想做个网站手机网站建设优势
  • 网站制作毕业设计滁州市建设局网站
  • saas建站和开源建站的区别比较高端的网页
  • 新公司董事长致辞做网站wordpress二次开发手册chm
  • 网站显示建设中大型企业网站制作
  • 长沙自动化网站建设wordpress 自定义栏目 调用
  • 吉大建设工程学院官方网站wordpress 文章图片插件
  • 赤峰中国建设招标网站网页设计素材网站推荐
  • 天津网站建设电焊机wordpress主题jenney
  • 个人网站制作wordpress英文注册查询网站
  • 哪里有免费网站空间申请wordpress重定向插件
  • 福州微网站开发什么样的网站快速盈利
  • 吉首市建设局官方网站一对一直播软件开发定制
  • 网站开发验收单做的网站如何被百度搜到
  • 网站的数据库是什么两学一做网站链接