zoukankan      html  css  js  c++  java
  • 【杂记】关于在实际项目中使用TDD的方法

    最近对一个项目进行重构,使用TDD的方式,在开发过程中,对TDD在真实项目中的应用有一些疑惑,于是在TDD的群里请教了以下,熊大和热心群友给予了解惑,同时还有另外一个哥们也抛出了一些问题,和我在开发过程中所遇到的问题非常相近,所以在这里做个记录

    项目简述:

    我的问题:

    1.在开发过程中,是自顶向下开发,还是应该自底向上开发,及是应该从controller -> app service -> domain逐层展开,还是domain -> appservice -> contoller 逐层完善

    答:这个问题和TDD无关,TDD只关心一件事情,没有测试就不能写代码,有了失败的测试才能写代码,应该是先做一个最简单的端到端的架子,再一点点的完善逻辑

    2.在自顶向下开发的过程中,比如在TDD controller时,由于appservice还是完成逻辑,是先mock appservice接口,还是先去完成appservice的开发,再回过头来继续开发controller

    答:一般非外部接口不mock

    另一个哥们的问题 & 具体业务案例:

     

     这个问题也是我在开发过程中所遇到的问题,在快速迭代的环境下如何持续集成,不影响发布。

    在这个流程中,熊大指出:

    1.应该先做addPoint service,

    2.再创建account对象,

    3.做界面(接口)

    4.添加一个字段,如果这个字段不属于account,添加它应该属于的对象

    5. 重复4直到完成需求

    要现有界面(接口),如果没有接口,整个流程没有通,添加的所有值对象、所有方法都是无法展示。

    熊大的Tasking:

    1. 实现空的addpoint服务,验收条件:服务部署上线,可以被调用,有可发布的文档

    2.  addpoint服务接受一个参数

    3.  重复2直到完成需求

    伪代码:

    account = accountRepository.load(accountId)

    account.addPoint()

    继续提问:在account的addpoint业务中,需要查询以下加积分的规则(redis/db),然后查已经加了积分的历史,这些都要依赖数据库,应该怎么处理

    答:规则属于reference data,在外部查询出来传给它,历史记录可以通过account根找出来。

    总结:

    1. 先写空的接口,使接口可发布,并且尽快发布,做到有文档可用。空接口可以先hard code 返回一些数据。

    2. 充血模型的类,属于对象子的状态,需要对象自己的方法去实现。对这个类的自己业务也使用TDD 驱动出来

    3.在实现复杂代码的时候,不要一次全部写完,逐步迭代。保证系统能持续通过测试和发布。

    4.service层(顶层)的测试方法,不需要测试所有场景,输入依赖方法的逻辑,单独写测试方法去测试。即只测试属于自己职责的代码。

    5.如果domain需要依赖第三方的数据(db/redis/api)可以在service查询出来,然后传给domain去实现逻辑

     
  • 相关阅读:
    梯度提升树算法GBDT
    优先队列 priority_queue
    谭平 Vision Course Note 1~2 Recommended Textbook and Camera Basics
    侯捷老师C++基础课程笔记7-栈、堆和内存管理
    侯捷老师C++基础课程笔记6-三大特殊函数
    侯捷老师C++基础课程笔记5-操作符重载与临时对象
    侯捷老师C++基础课程笔记4-参数传递与返回值
    侯捷老师C++基础课程笔记3-构造函数(不含指针变量的class)
    侯捷老师C++基础课程笔记1-2
    C文件处理之24/32位bmp图像的旋转
  • 原文地址:https://www.cnblogs.com/c-supreme/p/13161383.html
Copyright © 2011-2022 走看看