To Make Your Unit Tests Automation And Human Readable


.NET原生的单元测试

大多数情况之下,我们仅仅是用Moq等组件辅助我们将所有单元测试编写完成,之后,会在代码有修改后,重新run所有的单元测试项目,以检查本次的改动是否影响到相关逻辑。 以上方式有多个缺点:

显然,上述这些缺点与如今正热的TDD、CI都有所违背。它更像是一个封闭的、难以使用的一套单元测试系统,没有办法更多的展开;就像是在一间小黑屋里测试所有的灯泡亮不亮,压抑;而不是只要在敞亮的房间外边按一个按钮,然后就从门缝中塞出一封测试报告,清晰的告诉你里面发生的一切,我知道你可以想象到这个场景。

从门缝中塞出的测试报告

是的,我需要这样一份报告。前端开发者的技术栈里往往有“构建”这一说,因为他们常常需要严格按照自己的要求来做一些基于任务一样的工作,比如常见的:文件拷贝、压缩、工程编译部署、执行脚本等等;基于Nodejs的有Gulp,但它与.NET并不紧密,说到.NET下最具威力的构建工具,那必然是Cake!这时那些.NET忠实开发者粉丝的福音,因为你可以用熟悉的C#语言写出任何你想要构建的任务流。

那么,想要轻松的拿到门缝中塞出的测试报告,我建议.NET开发者们可以研读 Cake 的文档了。Cake中有一些built-in(内建的)API,称之为DSL(Domain Specific Language),就是说针对Cake这个领域设计的一些API接口,这些API都可以直接使用,诸如文件操作、文件夹操作、压缩等等。且Cake非常勤劳,它集成了很多常见的、优秀的第三方packages,大多数是Nuget和Git上可以获取到的,也就意味着他们都是开源的。

Cake的一般性工程文件编写非常简单,熟悉C#的同学很容易上手,像下边是一个build.cake文件的预览:
说明:

Cake 与 单元测试

Cake 其实集成了多种流行的单元测试组件,这里以NUnit为例。非常简单,只有2个步骤:

执行任意的*.cake文件非常简单,首先你要通过Nuget或任意方式将Cake下载下来,在cmd或power shell中执行类似以下脚本:cake.exe yourBuild.cake -param1=x -param2=y即可,执行完成后你会在执行终端看到类似如下结果(输出非常清晰明了):

以我事先写好的build.cake为例,里边有4项任务:Clean、Build、Core、Report,其中关于NUnit Runner Console输出的部分如下:
显示了所有单元测试的结果。

单元测试与报表

单元测试在量大的时候,更需要一份统一的、可读的报表将结果清晰简单的呈现出来,以便于快速的追踪问题所在。NUnit默认只会有一个TestResult.xml文件生成,其信息基本与终端看到的一致,不是很方便,于是乎,就有第三方开源组件(NUnitOrange)去解析了这个TestResult.xml,将它转换成了*.html格式。转换之后的格式如下:

在本例中,我将报表放在了执行目录下report/{year}/{month}/report-ddHHmmss.html下,以便管理。导出单元测试覆盖率详细报表,请参考导出单元测试覆盖率报表

Sample

本文所有代码截图均来源自己写的一个一般通用的Cake工程:unitTest-runner.git

可预先阅读README.md,以了解更多使用方法。

(打赏)

If you want to pay for this
I will list your account name here.
HA HA!