做为一个程序员, 深深知道计算机自动化的速度是比人手动的速度快的, 所以”快速”完成项目的一个重要武器就是: 能自动化就不要手动.
 
BDD/TDD有很多优势, 其中之一就是自动化, 我们这节文章先讲自动化, 在后面的文章里面会讲到BDD/TDD的其他优势.
 
在ABP .NET Core + SPA版本和52ABP里面, 可以在以下层面做自动化测试:
  1. 前端Angular项目的e2e自动化测试
  2. 前端Angular项目的unit test
  3. 后端.NET Core项目的unit test
  4. 后端.NET Core项目的集成自动化测试
 
首先, 所有层面都写自动化测试代码, 是不符合康威定律第二定律的. 嗯, 康威定律是微服务的理论基石, 很显然我们不能违背它.
如果你之前没有接触和运用过BDD/TDD, 那么我推荐只写前端Angular项目的e2e自动化测试就好了. 具体怎么写在这系列课程的序里面有详细描述<如何用ABP框架快速完成项目 - 自动化测试 - 前端angular e2e protractor>
 
然后根据康威定律第二定律, 我们很显然不能像十年前2008年时候那样追求代码覆盖率80%以上.
我个人认为能把人工手动要跑的Postivie所有测试用例和主要的negative测试用例全部转为自动化, 这已经足够了.
然而有同学反映, 我这个说法太抽象了, 很难执行. 我想了想, 的确是, 没有基础的同学可能并不能掌握哪些是Positivie Test和Negative test.
这样吧, 你写完成程序后, 手动测试一遍, 然后把你刚才做的手动测试自动化就好了. 这么一说, 应该是比较直观和可执行的吧.
 
有同学说, angular官网是不推荐写e2e测试, 而是推荐写unit test的. 是的, 没错. 但是这是针对团队的项目和有BDD/TDD基础的同学来说的, 对于没有BDD/TDD基础而又一个人做一个项目的同学, 我认为还是写e2e测试比较好, 因为直观啊! e2e测试会弹出chrome浏览器UI, 这样如果测试跑不通过, 很直接的就知道原因在哪里了, 修复的时间和精力会大大减少.
 
不过, e2e测试会对电脑硬盘和内存要求比较高, 起码要是SSD硬盘和16G内存才会跑得流畅, 不然会经常性报错. 
 

做为一个程序员, 深深知道计算机自动化的速度是比人手动的速度快的, 所以”快速”完成项目的一个重要武器就是: 能自动化就不要手动.
 
BDD/TDD有很多优势, 其中之一就是自动化, 我们这节文章先讲自动化, 在后面的文章里面会讲到BDD/TDD的其他优势.
 
在ABP .NET Core + SPA版本和52ABP里面, 可以在以下层面做自动化测试:
  1. 前端Angular项目的e2e自动化测试
  2. 前端Angular项目的unit test
  3. 后端.NET Core项目的unit test
  4. 后端.NET Core项目的集成自动化测试
 
首先, 所有层面都写自动化测试代码, 是不符合康威定律第二定律的. 嗯, 康威定律是微服务的理论基石, 很显然我们不能违背它.
如果你之前真正运用过BDD/TDD, 那么我推荐只写前端Angular项目的e2e自动化测试就好了. 具体怎么写在这系列课程的序里面有详细描述<如何用ABP框架快速完成项目 - 自动化测试 - 前端angular e2e protractor>
 
然后根据康威定律第二定律, 我们很显然不能像十年前2008年时候那样追求代码覆盖率80%以上. 我个人认为能把人工手动要跑的Postivie所有测试用例和主要的negative测试用例全部转为自动化, 这已经足够了.
 
有同学说, angular官网是不推荐写e2e测试, 而是推荐写unit test的. 是的, 没错. 但是这是针对团队的项目和有BDD/TDD基础的同学来说的, 对于没有BDD/TDD基础而又一个人做一个项目的同学, 我认为还是写e2e测试比较好, 因为直观啊! e2e测试会弹出chrome浏览器UI, 这样如果测试跑不通过, 很直接的就知道原因在哪里了, 修复的时间和精力会大大减少.
 
不过, e2e测试会对电脑硬盘和内存要求比较高, 起码要是SSD硬盘和16G内存才会跑得流畅, 不然会经常性报错.
 
有同学问, 对于ui自动化测试这方面,是不是ui变化了,无论使用何种测试框架,都避免不了重新编写测试用例的代码?
这是必然的, 在这点上, 不会会计的程序员不是个好的项目经理,是要根据自身实际计算成本收益并进行取舍。
为什么会扯到项目经理这个角色呢? 首先一个项目UI短期经常变化, 项目经理是有责任的, 因为即使不写自动化测试代码, 纯手动测试, 你也要花时间去修改UI的代码啊. 这个锅无论如何都轮不到自动化测试去背, 应该有项目经理或产品经理去背.
 
自动化的另一个利器就是DevOps了, 在这方面, 徐磊有十分丰富的课程文档, 我想我是不可能做得比他更好的啦, 所以推荐大家阅读. 

如何用ABP框架快速完成项目(8) - 用ABP一个人快速完成项目(4) - 能自动化就不要手动 - 使用自动化测试(BDD/TDD)的更多相关文章

  1. ABP框架系列之七:(About-关于ABP)

    Considerations Source codes Contributors Contact ASP.NET Boilerplate is designed to help us to devel ...

  2. 如何用ABP框架快速完成项目(面向项目交付编程面向客户编程篇)(1) - 目录

    昨天发表了<如何用ABP框架快速完成项目 - 自动化测试 - 前端angular e2e protractor>后,大家十分热情,几个小时内就收到了不少问题,包括: 对于ui自动化测试这方 ...

  3. 使用代码生成工具快速开发ABP框架项目

    在一般系统开发中,我们一般要借助于高度定制化的代码生成工具,用于统一代码风,节省开发时间,提高开发效率.不同的项目,它的项目不同分层的基类定义不同,我们需要在框架基类的基础上扩展我们的业务类代码,尽量 ...

  4. 使用代码生成工具快速生成基于ABP框架的Vue+Element的前端界面

    世界上唯一不变的东西就是变化,我们通过总结变化的规律,以规律来应付变化,一切事情处理起来事半功倍.我们在开发后端服务代码,前端界面代码的时候,界面都是依照一定的规律进行变化的,我们通过抽取数据库信息, ...

  5. 广州.net俱乐部12月份ABP框架活动场地征集、志愿者征集、合作讲师\副讲师征集

    大家好,我在<被低估的.net(上) - 微软MonkeyFest 2018广州分享会活动回顾>一文中提到,我将在12月份搞一场ABP框架活动,现向大家征集活动场地.志愿者.合作讲师\副讲 ...

  6. [ABP]浅谈模块系统与 ABP 框架初始化

    在 ABP 框架当中所有库以及项目都是以模块的形式存在,所有模块都是继承自AbpModule 这个抽象基类,每个模块都拥有四个生命周期.分别是: PreInitialze(); Initialize( ...

  7. 浅谈模块系统与 ABP 框架初始化

    在 ABP 框架当中所有库以及项目都是以模块的形式存在,所有模块都是继承自AbpModule 这个抽象基类,每个模块都拥有四个生命周期.分别是: PreInitialze(); Initialize( ...

  8. 2019 年起如何开始学习 ABP 框架系列文章-开篇有益

    2019 年起如何开始学习 ABP 框架系列文章-开篇有益 [[TOC]] 本系列文章推荐阅读地址为:52ABP 开发文档 https://www.52abp.com/Wiki/52abp/lates ...

  9. ABP 框架从源码学习——abp框架启动和结束(1)

       1.abp框架的启动是从Global.asax文件的Application_Start启动的,当然代表Global的application必须从AbpWebApplication继承: publ ...

随机推荐

  1. SpringMVC框架五:图片上传与JSON交互

    在正式图片上传之前,先处理一个细节问题: 每一次发布项目,Tomcat都会重新解压war包,之前上传过的图片会丢失 为了解决这个问题:可以不在Tomcat下保存图片,而是另找一个目录. 上传图片: & ...

  2. java super和this总结

    今天群里有人问我怎么复写父类的构造函数,我当时听错了以为是一般方法,然后就对他说只要同名就可以,然后他告诉我错了,我再仔细看,才知道他问的是复写 父类的构造方法,其实自己也不知道子类能不能复写父类的构 ...

  3. C++常见笔试题

    1.实现字符串转整数的函数:int atoi(const char *nptr) 2.实现数组折半查找:int BinarySearch(int a[],int len, int key) 3.实现字 ...

  4. String的split方法,你真的懂吗

    String的split方法相信大家都不陌生,或多或少都用过它将字符串转成一个数组,但是就是这样一个简单的方法,里面也有一个不得不注意.不深不浅的小坑. 本地测试代码如下图所示: 图1 大家会发现sp ...

  5. leetcode — simplify-path

    import java.util.Stack; /** * * Source : https://oj.leetcode.com/problems/simplify-path/ * * * * Giv ...

  6. MYSQL事务隔离级别详解附加实验

    参考: https://dev.mysql.com/doc/refman/5.7/en/set-transaction.html http://xm-king.iteye.com/blog/77072 ...

  7. session 控制单点登录

    在我登录成功之后,我会 session.setAttribute("user", userMap);//设置session 所以就写了一个监听器来控制登录的. package or ...

  8. Tomcat8源码笔记(六)连接器Connector分析

    根据 Tomcat8源码笔记(五)组件Container分析 前文分析,StandardService的初始化重心由 StandardEngine转移到了Connector的初始化,本篇记录下Conn ...

  9. 痞子衡嵌入式:ARM Cortex-M内核那些事(1)- 内核架构编年史

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是ARM内核架构历史. 众所周知,ARM公司是一家微处理器行业的知名企业,ARM公司本身并不靠自有的设计来制造或出售CPU,而是将处理器架 ...

  10. Jenkins结合.net平台工具之ReportGenerator

    上一节我们讲解了如何使用opencover生成单元测试覆盖率报告,opencover默认生成的report为xml格式,可读性并不是特别强,如果靠阅读opencover生成的results.xml来分 ...