首页 > 编程语言 >C#单元测试(net、api等)

C#单元测试(net、api等)

时间:2023-01-27 11:33:19浏览次数:59  
标签:https C# 代码 testing 单元测试 api 测试 net com

C#单元测试相关的开源软件中,NUnit及XUnit星级排名靠前,MsTest是微软公司开发的集成在Visual Studio中的C#单元测试工具。

既然微软文档中将XUnit列在第一个,那就用他吧,别在选择上过于纠结。

为代码编写测试会自然地解耦代码,因为采用其他方法测试会更困难。


 

需要了解的大概包括:

1、单元测试语法

2、运行测试的多种方式(vs软件,命令行)

3、选择性运行单元测试

4、统计覆盖率

5、对已发布的输出进行单元测试


 

优美的单元测试犹如以下诗句:

轻轻的他走了,
正如他轻轻的来;
他轻轻的招手,
不留下一丝足迹。

 


 

 

单元测试测试什么:

开发人员控件内的代码

单元测试不测试什么:

与数据库、文件系统和网络资源的交互

 

附上参考资料:

https://chsakell.com/2015/05/10/asp-net-web-api-unit-testing/  翻译后 https://blog.51cto.com/lybing/1856224

https://learn.microsoft.com/zh-cn/dotnet/core/testing/unit-testing-with-nunit

https://learn.microsoft.com/zh-cn/aspnet/web-api/overview/testing-and-debugging/unit-testing-with-aspnet-web-api

https://www.cnblogs.com/leoninew/p/practice-for-unit-test.html

https://www.bilibili.com/video/BV1Bb411V7kk/?spm_id_from=333.337.search-card.all.click&vd_source=ce91cc9c390defdbe2d6e89f571a5051

 

单元测试的常见误解

  • 单元测试浪费了太多的时间
    • 虽然不进行单元测试可以更快的交付到后续测试阶段,但是在后续集成测试阶段、系统测试阶段会发现更多的缺陷甚至软件无法运行的致命缺陷,这些缺陷修复的时间远超过单元测试的时间。另外没有单元测试的代码后期软件进行重构或者改进时花费的时间也比有单元测试的所花费的时间要多很多。所以说完整计划下的单元测试是对时间的更高效的利用。
  • 已经有接口集成测试、系统功能测试进行质量保证了,集成测试阶段对接口进行全面测试就可以达到单元测试的要求,没必要做重复工作在进行单元测试。
    • 接口测试和功能测试无法覆盖所有的代码,这样如果缺陷存在则将被遗漏,并且Bug将被带到生产上去。一旦用户使用过程中触发了这些没有测试的代码就会带来严重的经济后果。
  • 跑通一个业务主流程等价于做过单元测试
    • 目前有很多开发人员认为,开发完代码之后,写个main方法,从入口调完所有的模块,最后验证下返回结果,就认为做过单元测试了,这种想法是及其错误的,这充其量算一种不全面的冒烟测试,是对单元测试概念的错误认知。

 

用例设计指导

  • 1.必须遵守 AIR 原则
    • 【说明】单元测试在线上运行时,感觉像空气(AIR)一样并不存在,但在测试质量的保障上,却是非常关键的。好的单元测试宏观上来说,具有自动化、独立性、可重复执行的特点。 A:Automatic(自动化) I:Independent(独立性) R:Repeatable(可重复)
  • 2.单元测试应该是全自动执行的,并且非交互式的
    • 【说明】测试框架通常是定期执行的,执行过程必须完全自动化才有意义。输出结果需要人工检查的测试不是一个好的单元测试。单元测试中不准使用 System.out 来进行人肉验证,必须使用 assert 来验证。
  • 3.保持单元测试的独立性
    • 【说明】为了保证单元测试稳定可靠且便于维护,单元测试用例之间决不能互相调用,也不能依赖执行的先后次序。反例:method2 需要依赖 method1 的执行,将执行结果做为 method2 的输入
  • 4.单元测试是可以重复执行的,不能受到外界环境的影响
    • 【说明】单元测试通常会被放到持续集成中,每次有代码 check in时单元测试都会被执行。如果单测对外部环境(网络、服务、中间件等)有依赖,容易导致持续集成机制的不可用。
  • 5.对于单元测试,要保证测试粒度足够小,有助于精确定位问题。单测粒度至多是类级别,一般是方法级别
    • 【说明】只有测试粒度小才能在出错时尽快定位到出错位置。单测不负责检查跨类或者跨系统的交互逻辑,那是集成测试的领域
  • 6.核心业务、核心应用、核心模块的增量代码确保单元测试通过
    • 【说明】新增代码及时补充单元测试,如果新增代码影响了原有单元测试,请及时修正
  • 7.单元测试代码必须独立项目:不允许写在业务代码目录下
    • 【说明】源码构建时会跳过此目录,而单元测试框架默认是扫描此目录

标签:https,C#,代码,testing,单元测试,api,测试,net,com
From: https://www.cnblogs.com/tudou365/p/17068532.html

相关文章

  • vs2015和cocos2d-x-3.17.2 开发环境搭建
    vs2015和cocos2d-x-3.17.2开发环境搭建 cocos2d-x当前最新稳定版本是3.17.2,需要使用vs2015来构建。首先是安装vs2015。选择安装下面的vs版本:cn_visual_studio_community_2......
  • VSCode配置编译MSVC程序
    VSCode配置编译MSVC程序本文来自于以下链接的实践:​​​ConfigureVSCodeforMicrosoftC++​​前言自从盘古开天辟地以来,乱世纷争,群雄并起。在编程IDE领域,各路豪杰争霸,互......
  • Windows上使用VSCode结合mingw编译和调试C程序
    Windows上使用VSCode结合mingw编译和调试C程序目标是在Win7上,用VSCode使用mingw调试C程序.要设置终端为bash.exe.Windows7已经安装了VSCode(及相关插件),MSYS64,......
  • docker安装gogs
    一、docker安装gogs拉取镜像dockerpullgogs/gogs创建目录mkdir-p/usr/local/gogs创建容器dockerrun--name=gogs-d-p10022:22-p10880:3000-v/usr/l......
  • 安装spconv1.2.1
    pybind11:https://zhuanlan.zhihu.com/p/524159953检查cmake:cmake–versionsudopipinstall--upgradecmake==3.22.0(其他版本有问题)sudoapt-getinstalllibboost......
  • Linux PM QoS framework(2)_PM QoS class
    1.前言回顾上一篇文章(LinuxPMQoSframework(1)_概述和软件架构),PMQoSframework抽象出4个系统级别的QoSconstraint(统称为PMQoSclass),分别是cpu&dmalatency、network......
  • 「解题报告」ARC139D Priority Queue 2
    我困炸了,一个月没有六点起过床了。统计总贡献不好统计,考虑把贡献拆开统计。发现统计每个数出现次数还是不好统计,那就直接把数也拆开。对于每一个\(i\),统计\(\gei\)的......
  • Linux PM QoS framework(3)_per-device PM QoS
    1.前言per-devicePMQoS是针对指定设备的QoSframework,背后的思考如下:1)resume_latency在RuntimePM的框架下,当device的引用计数减为0的时候,RPM会suspend该device。不......
  • CSAPP随笔:高速缓存
       解决的问题:系统消耗大量的时间将信息从一个地方移动到另一个地方。较大的存储设备比较小的存储设备运行得慢。价格上速度快的要远高于速度慢的,同时加快处理......
  • tcl 数据列表
      salutealtairFXJ图1 生成列表及列表中元素的取用(正取,反取) 图2取出范围内的元素  图3插入元素  图4列表合并......