目录

介绍

背景

使用代码

兴趣点


考虑到使用xUnit编写许多测试的方式,需要改进两件事:测试需要更加真实,并应防止日志记录受限。使测试更切合实际,将减少生产问题的可能性。此外,测试日志记录的内容可以避免在出现生产问题时必须限制日志记录细节来解决问题的问题。本文介绍了如何预防xUnit测试中的此类问题。

介绍

生产问题是一个众所周知的问题。在大多数情况下,您不知道是什么引起了问题,因此首先要做的是读取日志。阅读日志后,开发团队可能会询问以下问题:

  1. 为什么没有记录我们期望记录的对象?
  2. 为什么我们找不到描述问题的警告或错误消息?
  3. 为什么我们找不到必须发生的异常?
  4. 为什么我们的测试没有失败,因为有明显的问题?

从TDD的角度来看,需要进行两项改进:

  1. 自动测试需要变得更加现实才能重现实际问题。
  2. 如果没有日志记录,则测试需要失败。

本文介绍了如何执行此操作。

背景

如果您以前曾经使用过xUnit,这将非常有帮助,因为测试示例是基于xUnit的。另外,.NET Core的一些经验也很有帮助,因为这是我们在这里使用的技术。

使用代码

出于演示目的,我们使用了一种非常简单的控制器方法。传入的value包含FirstName, MiddleName和LastName以返回全名ActionResult。

[HttpPut]
public ActionResult<string> Put([FromBody] Name value)
{_logger.LogWarning("Warning Logged");_logger.LogInformation("This is the input {name}", value);_logger.LogError(new InvalidDataException("Some exception message"),"Some Exception");return Ok($"{value.FirstName} {value.MiddleName} {value.LastName}");
}

对于此方法,我们需要一个可以检测到记录的测试:InvalidDataException,一些记录消息和Name类型的数据对象。此外,测试必须切合实际,这意味着它知道并使用设置依赖项的Startup类。在常规的单元测试中,情况并非如此,但在针对.NET Core的集成测试中,情况从下面显示的代码中可以清楚地看出:

[Fact]
public async Task NoMiddleNamePutTest()
{await using (var fixture = new Fixture<Startup>()){var controller = fixture.Create<LogicController>();var response = controller.Put(new Name(){FirstName = "F",LastName = "L"});Assert.Equal(200, ((ObjectResult)response.Result).StatusCode);Assert.Single(fixture.LogSource.GetWarnings());var dataLogged = fixture.LogSource.GetLoggedObjects<Name>().ToList();Assert.Single(dataLogged);Assert.Equal("F", dataLogged.Single().Value.FirstName);Assert.Contains(fixture.LogSource.GetLogLines(), a => a == "Warning Logged");Assert.Contains(fixture.LogSource.GetLogLines(), a => a.Contains("This is the input"));Assert.Single(fixture.LogSource.GetExceptions().OfType<InvalidDataException>());}
}

Fixture<>类是从一个名为IntegrationFixture的公开的NuGet包。它使用WebApplicationFactory<>类(在此处说明)来减少开发人员要编写的样板代码。在Startup类中设置的真实类依赖关系(不是模拟)用于使测试变得现实。LogSource属性使开发人员能够调用返回我们关注的数据的方法(如记录的数据对象,记录的行和记录的异常)。由于使用了真正的依赖关系,因此生产问题的可能性越来越小,因此这些问题很可能会在测试中涵盖。此外,如果有生产问题,将有足够的日志记录来帮助您解决问题,因为xUnit测试将简单地失败并阻止部署,如果没有足够的日志记录,代码可以在GitHub上 .. 获得。

兴趣点

在编写代码时,我开始意识到自动化测试的重要性。作为开发人员,我们需要编写用于CI的集成测试,而不仅仅是单元测试。此外,我们不仅应该关注所需的功能,还应该关注日志记录。良好的日志记录对于快速解决生产问题至关重要,并且使用上述提到的NuGet软件包,我们可以轻松地检测出已记录的内容。

借助xUnit减少了生产问题相关推荐

  1. 如何借助Vale减少开源社区文档中的负面和偏见语言

    ​ 整理 | 西狩xs   校对 | 山河已无恙 出品 | CSDN云原生 声明:本文出自CNCF,由技术作家Chris Ward在Chronosphere博客上发表.CSDN将文章翻译成中文,分享给 ...

  2. 机电设备管理软件如何帮助企业破解生产物料管理难题?

    在机电设备制造企业生产过程中,生产物料的管控是一个非常关键的环节.物料能否管理好,关系着产品的质量.能否提高生产效率.降低制造成本等等. 因此,机电设备制造企业应借助机电设备管理软件,建立一套完善的生 ...

  3. 4、 第一招式----流线化生产:流线化生产线

    库存是万恶之源,工厂中的许多浪费都是因为有库存而被隐藏起来,如果要衡量一个工厂经营管理水平的高低,最简单最正确的方法,就是看看其库存品的多寡.库存出了原材料及制成品之外,当然还包括正在加工.制造以及装 ...

  4. 性能测试测试环境与生产环境_不在生产中测试? 在生产中进行测试!

    性能测试测试环境与生产环境 如果您上一次更新IT安全标准是在5年前或更早,那么它们很可能与当今的DevOps和站点可靠性工程 (SRE)实践的现状不符. 一个特别棘手的话题是生产中的测试,以及因此使用 ...

  5. 计算机控制系统生产现场应用,浅析计算机控制系统在工业现场生产中的应用.doc...

    浅析计算机控制系统在工业现场生产中的应用.doc 浅析计算机控制系统在工业现场生产中的应用 摘 要:随着计算机技术的日益发展,其在各个领域的应用也不断扩大.计算机技术在工业生产领域的应用尤其以自动控制 ...

  6. xUnit安装及注意事项

    前言 对于单元测试,想必大家都已再熟悉不过了,同时单元测试的重要性也越发突出,在招聘中也特别强调单元测试,但是对于微软内置的单元测试还是太过于繁琐,于是都在寻找一种简洁并且更加轻量的测试工具.用的最多 ...

  7. 计算机制造属于连续性生产,生产类型

    生产类型是按工业产品生产工艺技术过程的连续程度或生产产品的重复程度划分的类型.按工业产品生产工艺技术过程的连续程度不同,可以分为连续生产和间断生产.连续生产的工艺技术过程连续程度高,不允许有任何间断出 ...

  8. 精益生产与ERP水火不容?(转)

    精益生产与ERP水火不容? 作者肯定没看1987年APICS的报告 "自然界始终在追求一种和谐,今天的制造业亦是这样."一些常见的关于精益生产和ERP的说法似乎表明精益生产和ERP ...

  9. ERP系统有效提高生产计划合理性

    威海市东海船舶修造有限公司是一个独立经营.独立核算的股份制企业,始建于1974 年,位于威海市经济开发区崮山镇皂埠口,固定资产 3000 万人民币,现有职工人数200多人,其中中高级工程师8人. 船厂 ...

最新文章

  1. 深入浅出理解Javascript原型概念以及继承机制(转)
  2. 体感开发学习总结 - 二
  3. NODE_PATH的疑难杂症(转)
  4. 快开宝PDA开单器出入库扫码:让批发零售变得更简单
  5. git切换到远程分支
  6. 前端学习(2179):vue-router-router的由来和vue-router
  7. java外部类_Java里什么叫内部类什么叫外部类
  8. viso图插入Word中大片空白解决办法
  9. html5--5-4 绘制矩形
  10. OpenCV_霍夫变换_直线检测_HougLines
  11. paip. erlang语法C++语法对比attilax总结
  12. 群晖Docker青龙面板部署方法V2.11.0
  13. 【中亦安图】导致Oracle性能抖动的参数提醒(4)
  14. 定义一个html文档的范围用什么标签,定义一个HTML文档的范围用()标签 A.ol B.ul C.pre D.html...
  15. Centos7创建及修改用户名和用户组名
  16. Android OpenMobileAPI、OMA、智能卡开发总结
  17. oracle 截取小数点_数据库截取小数点后两位小数
  18. 用简易方法证明 n 个数的算术平均数 > 几何平均数
  19. 国六OBD在线排放监测终端拆解成本分析,你是不是买贵了?
  20. 使用了systemctl disable lightdm快速恢复

热门文章

  1. 女生做产品经理好吗_谁说女生不适合做产品经理?
  2. order by 影响效率么_内存碎片对性能的潜在影响
  3. python列表心得_Python学习心得(第一篇:字符串、列表等)
  4. spark的python开发安装方式_windows下安装spark-python
  5. 一稿过的Banner模板素材!做电商的你一定需要
  6. 商业|商务海报篇-简洁华丽的商务海报
  7. 非常实用的设计类导航
  8. 常见的UI设计素材模板
  9. qq动态页面变方格_腾讯QQ音乐9.7.5正式版更新:「歌手主页个人主页」界面全新改版...
  10. 最小错误率贝叶斯决策的基本思想_机器学习笔记—模式识别与智能计算(四)基于概率统计的贝叶斯分类器设计(贝叶斯决策)...