这是<如何用ABP框架快速完成项目 >系列中的一篇文章。

BDD很赞!比TDD先进很多,能够大大提高编码效率。

上一篇文章说了如何在.NET Core里安装Specflow. 然而文章成果只到了hello world级别。

要想真的和实际业务结合,比如要能够IOC new class实例和能够调用数据库和第三方服务。用专业术语来说,就是能跑集成测试和单元测试。这就是这篇文章的目的了。

和.NET不一样的是,.NET Core取消了App.config,并且整个机制都改变了。导致很多.NETer转.NET Core的时候一脸懵逼

所以在.NET Core下运用BDD/TDD也不一样了。这篇文章就讲讲如何配置。

  1. 原来app.config一分为二,specflow部分划为specflow.json,在这篇文章里有提到。其他划为appsetting.json

  2. 文件格式也从原来的xml文档变为json文档。

  3. 同时还需要把appsetting.json文件属性设置为如下

  4. 读取配置的方式也从原来的system.configmanager.appsetting变为 IConfigurationRoot[key]方式。示例代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class AppEnvConfiguration : ITransientDependency
    {
        private readonly IConfigurationRoot _appConfiguration;       
        public bool IsEnableADFS => bool.Parse(_appConfiguration["ExternalAuth:WsFederation:IsEnabled"]);
        public AppEnvConfiguration(IAppConfigurationAccessor configurationAccessor)
        {
            _appConfiguration = configurationAccessor.Configuration;
        }
    }

      

Q&A:

  1. 为啥集成测试里面数据库返回结果数目总是0?

    答:检查一下测试项目目录\bin\Debug\netcoreapp2.1目录下有没有appsetting.json这个文件,没有则看看有没有做上面的第3步

通过以上步骤,终于可以调用数据库和第三方服务来跑集成测试了。然而还有一个很大问题,单元测试跑不过啊!!!

为什么会跑不过呢?

因为BDD和TDD不一样。

TDD的Test case是可以直接继承ABP里面的XXXTestBase基类的,这个基类里面提供了IOC new class实例等一系列很有用的方法。

但是BDD的Specflow却是Test Case和Step Definition分离的。在Step Definition里面是无法调用XXXTestBase基类里的这些方法的。

那怎么办呢?

照如下步骤办即可:

  1. 新增一个TestBaseWrappers文件夹

  2. 然后根据实际业务从最小化角度来建立TestBaseWrapper类

  3. 在这个类里面写IOC代码

  4. 然后再Step Definition类里调用这些TestBaseWrapper类。

Q&A:

  1. 为什么不用Step Definition类直接继承ABP里面的XXXTestBase基类呢?

    答:首先会报错。然后我在这篇文章里面说到,我们只有一个Step Definition类,然后分布在多个文件,通过Partial关键字来组合。所以如果Step Definition这么大的一个类来直接继承TestBase基类,然后在TestBase基类里构造函数来IOC初始化所有要调用Service类实例,第一会遇到性能问题,第二会遇到循环调用问题,这画面太美不敢看啊。

  2. 报错:Message: System.InvalidOperationException : Mapper not initialized. Call Initialize with appropriate configuration. If you are trying to use mapper instances through a container or otherwise, make sure you do not have any calls to the static Mapper.Map methods, and if you're using ProjectTo or UseAsDataSource extension methods, make sure you pass in the appropriate IConfigurationProvider instance.如何解决?

    答:不要用MapTo扩展方法去Map,而要使用IObjectMapper,ABP官网十分清晰明确的说明了,要想用Unit Test就必须Always use IObjectMapper, do not use MapTo extension methods

    所以这道题是我面试必选题之一!!凡是在ABP项目里面使用MapTo扩展方法而不是使用IObjectMapper的,绝对是没写过单元测试的!这样子一下就可以判断出面试者有没有写过单元测试了!!!

  3. 为啥你讲了这么多测试方面的知识,开发的知识却很少?

    答:因为:

    1. 无论是TDD还是BDD,都是测试驱动,先写测试代码然后再写业务开发代码

    2. 讲ABP开发的文章太多,不缺我一个,然而讲用ABP去做BDD/TDD的文章却很少,很需要我去补充

    3. 我现在自己创业,自负盈亏,不像很多开发人员,每月固定有工资,旱涝保收,可以放心的去空谈理论。所以我一切以出活为主,以交付实际成果为第一目标,而不是以理论和空谈为目标。BDD/TDD可以避免把宝贵的时间投入到项目实际上不需要的理论方面,可以保证我做的东西是客户所想要的。所以我强烈推荐BDD这个核武器。

    4. 在上一点里面我说出了核心,如何保证你所做的东西就是客户想要的?这就是BDD与TDD相比,BDD最大的优点啦!!!毕竟,绝大多数情况下,业务人员会比开发人员更了解业务!

原文地址: https://www.cnblogs.com/adalovelacer/p/abp-quickly-delivery-16-run-specflow-at-dot-net-core.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

用ABP只要加人即可马上加快项目进展(二) - 分工篇 - BDD实战篇 - .NET Core里跑Specflow...相关推荐

  1. 用ABP只要加人即可马上加快项目进展(二) - 分工篇

    2018年和1998年其中两大区别就是: 前端蓬勃发展, 前后端分离是一个十分大的趋势. 专门的测试人员角色被取消, 多出了一个很重要的角色, 产品经理 ABP只要加入即可马上加快项目进展, 选择前后 ...

  2. 微信自动加人软件安装使用

    微信自动加人软件安装使用 只要9.9元 指定资源版效果 附近的人版效果 安装视频教程 安装软件和运行环境 安装夜神模拟器 点击下载 打开夜神模拟器设置设置分辨率为720-1280.  安装微信 下载安 ...

  3. 两个小技巧,马上加快上网速度

    技巧一:只改一个值, 马上加快宽带上网速度 如果是使用宽带方式上网,那么在注册表中设定适当的TcpWindow值,就可以加快上网速度.具体的操作方法如下: 选择[开始]→[运行]菜单项打开[运行]对话 ...

  4. 领英工具领英精灵批量加人有哪些方法

    使用领英的人都会使用领英精灵(linkedinjl.com/r)去批量加人,因为它可以帮助大家快速拓展人脉,特别是对于新手,效果更好.它是目前国内实力最强.用户最多,功能最强的领英工具.领英精灵-注册 ...

  5. 领英这样加人,一个月轻松加5000人

    在领英,一个领英账号可以加3万好友,但很少有人加到这么多,一则是领英对加人会有限制,二则是大家没有掌握好加人技巧.下面教大家一个快速拓展人脉的方法,一个月可轻松加5000人. 首先我们要清楚领英对加人 ...

  6. 领英加人的方法和细节,一个月轻松加1000+人

    在领英,一个领英账号是可以加3万好友,但很少有人加到这么多,一则是领英对加人会有限制,二则是大家没有掌握好加人技巧.下面教大家一个快速拓展人脉的方法,一个月可轻松加1000+人. 首先我们要清楚领英对 ...

  7. 领英不能加人怎么办?

    一个领英账号可以加到3万好友.虽然可以加这么多,但在实际操作中,其实是很难的.因为领英对加人有很多限制.比如:限制每周邀请数量.限制未通过邀请量.限制搜索名额.每月搜索名额限制等. 其中最常见到的是达 ...

  8. 怎么样引流加人?引流加人有什么技巧?引流加人用什么好

    如今互联网时代,营销模式早已从线下转到线上了,甚至很多人用引流来代替跑业务,而引流时需要操作的内容也不难,无非就是广撒网泛流量和精准加好友.而对于做营销的朋友来说,精准粉丝更适合推广产品,只有适合的精 ...

  9. 领英如何批量添加搜索的人脉,批量加领英推荐人脉,批量加精灵推荐人脉,批量加Groups成员,通过链接批量加人

    Linkedin平台是一个关系型职业社交平台,每个Linkedin标准账号可添加3万名1度人脉.使用Linkedin的朋友都希望快速多添加好友,扩大自己的人脉圈,增加销售或就业机会. 然而手动添加好友 ...

最新文章

  1. Java中对clone对象的认知
  2. win10系统如何安装iis信息服务器,win10系统安装iis服务功能的具体方法【图文教程】...
  3. web标准常见问题整理
  4. nstimer循环引用_ios开发中经典循环引用场景?
  5. 24个笔画顺序表_小学一年级语文26个汉语拼音字母要点+田字格儿歌,赶紧给孩子看...
  6. mysql与oracle在软件测试_Oracle和MySQL的一些简单命令对比
  7. 拳王虚拟项目公社:分享一个大学生上班族都可做的虚拟副业项目
  8. 【渝粤教育】国家开放大学2018年秋季 0553-22T色彩 参考试题
  9. Julia : DataFrame常见用法
  10. access日期如何增加年数_ACCESS 时间日期操作大全
  11. JS 常见的 6 种继承方式
  12. python股票收益率计算_股票分析之——收益率(附完整代码和讲解)
  13. PCI/PCIe转串口Linux驱动使用说明
  14. C++的岗位要求是什么?
  15. spring切入点函数
  16. 音频格式(一)PCM和WAV
  17. 证明HashSet不是线程安全
  18. PHP代码审计16—ThinkPHP代码审计入门
  19. 操作系统 -- 处理器管理
  20. 小白读《HTML5权威指南》第三部分 CSS

热门文章

  1. “数据门”事件频发 如何避免人为因素导致数据泄露?
  2. javascript深拷贝和浅拷贝
  3. AM335x kernel4.4.12 LCD 时钟翻转设置记录
  4. 《C语言及程序设计》程序填空——字符数组与字符串处理
  5. SystemCenter2012SP1实践(23)私有云的权限设计
  6. 使用Ext.grid.Panel显示远程数据
  7. android学习笔记之多线程(二)
  8. 局域网一点通之组网、管网、用网1000问
  9. .NET点滴:SpanT
  10. 【Blog.Core开源】完成升级.NET 6.0