Abp vNext之单元测试初探

本文分享了作者从忽视UT到重视过程中的转变,详细解析了ABPvNext的UT结构、配置、策略和常见技巧,包括测试数据管理、模拟用户、依赖注入等,以及MSTest、NUnit和xUnit.net的对比和最佳实践。

首先,一个优质的项目,UT是不可或缺的一部分,起先经历的N个项目几乎都是赶功能快步前进式的开发方式,项目质量保证大部分依靠实际使用和手工测试机械点界面来排查,不仅效率低下且很难保证覆盖率等等要求。

这些理论,刚开始我其实是不以为然的,我做过很多项目,没有UT也照样能跑,业务运行也没啥问题,但是后面真正开始写UT了,发现自己代码的很多问题,脸上不屑的笑容渐渐消失……

So,我们需要来看一下ABP vNext官方文档的UT介绍。

Emmm….好吧,没有介绍……

那就只能看代码了,先看一下Abp vNext生成UT的基本项目结构吧。

首先,我们能够看到项目创建后,已经默认针对三层进行了XUnit项目的创建,并且自带一个Samples的UT示例。

先从TestBase开始,这一层貌似包含UT环境的配置以及测试数据生成,我们可以首先在这一层的XXXTestDataSeedContributor类中创建种子数据,将其创建到临时库中,每次启动UT项目测试都会创建本地临时库并生成种子数据。

不过我后面发现一开始种子数据过多会拖慢UT启动速度,这在局部UT测试的时很不友好,因此之后我仅仅把一些必要性的测试数据放到了这里,如果是某些业务UT特定需要的数据,则在业务UT构造的时候再去创建。

这里有一个疑惑的点,种子数据创建后,UT层约定如何使用它?如果使用有问题,会不会造成其他UT的断言出现失败?

比方说,AUT方法删除了一个种子数据,而BUT方法的断言则是判断返回数量为1则为true。

在这个时候,因为A删除了数据,导致B断言失败,我们是否可以认为,UT产生的种子数据仅仅是可读的?亦或者断言逻辑,必须用UT方法产生的临时数据来断言有效性?

过程当中,遇到不少问题, 有些神奇的小技巧,也是翻官方源码翻出来的,下面例举几个吧。

#UT测试中设置当前用户

在当前UT类声明CurrentUser,覆写AfterAddApplication。

UT方法就可以设置模拟访问用户的属性了。

UT测试中注入依赖服务

XXXService = GetRequiredService<IXXXService>(); // 这其实没啥好说的,不过可以来充数……

后面的小技巧待补充……

 

然后,在每个UT层,我们使用常规的XUnit特性[F

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值