`

TDD初体验

阅读更多
1、为什么要使用TDD
   复杂的系统,有时会难以全面构建,而使用测试驱动能帮助你设计,自顶而下。最

初设计主要的接口不管实现;
   此种开发方式,代码质量通常比较好,而且容易进行回归测试

2、 TDD的开发步骤
    A、设计主要接口
    B、编写单元测试
    C、根据测试结果补充代码实现
    循环B和C

3、 实例
   需求:编写一个MathUtil类的add方法,方法接口设计如下:
   class MathUtil{
       public static Object add(Object a,Object b);
   }
   要求能够处理如下两种情况:
   a和b都是Integer类型
   a和b都是String类型

   我以前通常会这样子做:
    Object add(Object a, Object b){//动机:待以后再来实现
    return null;
   }
   评价: 这种方式不好,会留下隐患,除非逼不得已,否则不要这么做

   开发过程:
   A、构建一个方法,确定接口
   Object add(Object a, Object b) {
throw new TODOException();
    }

   B、编写一个测试用例:
   void testAdd() throws Exception {
Object left = new Integer(1);
Object right = new Integer(2);
Object result = MathUtil.add(left, right);
assertEqual(result, new Integer(3));
   }
  这时,testAdd的测试方法是运行不通过的,怎么处理呢?答案很简单:
  根据测试用例的运行结果补充代码!

  C、进一步完善-代码:
  Object add(Object a, Object b) {
if (a instanceof Integer
&& b instanceof Integer) {
int leftVal = ((Integer)a).intValue();
int rightVal = ((Integer)b).intValue();
return new Integer(leftVal + rightVal);
}
throw new TODOException();
}
   补充完上面的代码后,已经能够Integer相加的情况,我们可以通过这种方式继续

补充测试用例和实现代码。

4、注意点:
   使用TODOException处理未完成的部分
   在编写代码时,注意代码执行路径的全集
   在测试代码中,使用assert
   功能完成后,可能要进一步进行代码优化

  
分享到:
评论

相关推荐

    你真的会写单元测试吗?TDD初体验

    前言: 昨天读到了一篇文章,讲的是TDD,即Test-DrivenDevelopment,测试驱动开发。大体意思是,它要求在编写某个功能的代码之前先编写测试代码,然后只编写使测试通过的功能代码,通过测试来推动整个开发的进行。...

    LTE TDD与LTE FDD的关键过程差异分析

    与UMTS中的FDD和TDD制式相比,LTE的FDD和TDD制式在标准制定之初就得到了国际主流运营商和设备商的广泛支持,共同在3GPP框架下进行标准制定,体现了“求同存异”的原则,尽可能确保两种制式的协议实现一致,仅对无法...

    tdd-start:TDD첫

    通过实践这个"Tdd-start"项目,初学者将有机会学习如何使用JUnit和其他相关工具来编写测试,理解TDD的工作流程,并且体验到TDD如何改善代码质量。同时,他们也将了解到如何在Java项目中有效地集成和执行测试,以及...

    项目管理中的实践管理-----敏捷式开发的初体验

    测试驱动开发(TDD)是敏捷开发中的一个重要实践,它要求先编写测试用例,然后编写代码来通过这些测试。这种方法有助于确保代码质量,并在早期发现和解决问题。在实际开发中,通过TDD可以实现敏捷开发过程的落地,...

    Feeds:进料装载,显示和存储。 TDD方法

    - 缓存策略:为了提高用户体验,常用本地缓存策略,如使用`UserDefaults`存储轻量级数据,`CoreData`或`SQLite`处理复杂结构。 - 离线访问:即使没有网络,用户也应能查看已加载的进料,这需要将数据持久化到本地...

    Js初學者終身有用,對大家有幫助的

    15. **单元测试与TDD**:学习使用Mocha、Jest等工具进行单元测试,实践Test Driven Development(TDD)可以提高代码质量。 综上所述,JavaScript的学习涵盖广泛,从基础语法到高级特性,再到实际应用,每个部分都...

    Java Testing and Design(English)

    随着业务的发展,系统面临的负载会逐渐增加,因此,设计之初就需要考虑系统的可扩展性,确保在负载增加时,系统能够平滑地扩展资源,保持稳定的服务质量。这涉及到微服务架构、负载均衡、缓存策略等一系列技术的应用...

    Portfolio:我在创客学院期间和之后建立的项目列表

    ——周末挑战 - 更复杂的机场版本 - 团队合作的初体验(5 人)。 顺利!了解服务器、会话和 CSS - 一个 Ruby/Sinatra 应用程序,使用 Mailgun 重置密码 - 一个 Javascript 应用程序,Rock-Paper-Scissors 的替代...

    Dagger2 Demo

    在"Dagger2 初体验.md"这个文件中,我们可能会找到以下关键概念和步骤: 1. **组件(Component)**:组件是Dagger2的核心,它定义了依赖关系的接口。通过`@Component`注解,我们可以声明所需的模块(Module)以及...

    G技术体制与网络概述PPT课件.pptx

    而21世纪初,随着IMT2000的提出,3G网络如UMTS、WCDMA和CDMA20001X等技术应运而生,它们提供了更宽的带宽和更快的数据传输速度。 在中国,3G频谱资源的分配遵循国际电信联盟(ITU)的规定,主要分为FDD(频分双工)...

    LTE基础问答

    LTE 技术可以提供更高的数据速率、更低的延迟和更好的质量体验,从而满足用户的需求。 2. LTE 扁平网络架构是什么? 回答:LTE 网络架构是扁平的,减少了核心网络的复杂性,提高了网络的可靠性和扩展性。 3. 相...

    TD-LTE系统能力分析.pdf

    3. 峰值速率:TD-LTE的峰值速率是衡量其通信能力的重要指标,它直接影响用户体验和业务支持能力。上文提及的理论峰值速率需要在现实网络环境下进行实际测试和优化,以接近或者达到标准值。 4. 网络质量:包括信号的...

    UMTS.rar_UMTS_增值业务

    UMTS在2000年代初引入,是GSM(Global System for Mobile Communications)网络的演进,旨在支持语音、数据和多媒体服务,为移动增值业务的发展奠定了基础。 UMTS的关键组成部分包括: 1. **网络架构**:UMTS网络...

    3GPPLTE及其物理层技术综述

    LTE系统在设计之初就设定了E3G系统服务能力的目标,它满足了高数据率、低延迟和全IP基础的无线通信需求。LTE的关键特性还包括采用DFT-SOFDM(离散傅里叶变换-扩展频谱正交频分复用)和OFDMA(正交频分多址)技术来...

    你好,我的第一天的csdn

    这个描述似乎是在表达一个新手在CSDN(China Software Developer Network,中国软件开发者网络)平台上的初体验。CSDN是一个面向中国程序员的大型技术社区,提供博客、论坛、问答、资源分享等服务,是学习和交流IT...

    网络新技术(新版).docx

    在此背景下,通信市场迎来了前所未有的竞争局面,众多新型通信技术和业务如雨后春笋般涌现,极大地丰富了消费者的通信体验。 #### 一、TD-SCDMA技术概述 ##### 1. 技术背景 TD-SCDMA(Time Division-Synchronous ...

    非常经典的关于4G的演进资料

    4G技术,全称为第四代移动通信技术,是继2G、3G之后的移动通信标准,它在2000年代末至21世纪初发展起来,为全球用户提供高速、高质量的数据通信服务。4G的演进不仅代表了移动通信技术的重大进步,而且为物联网(IoT...

    WCDMA的关键技术及基本原理.rar

    WCDMA(Wideband Code Division Multiple Access,宽带码分多址)是第三代(3G)移动通信技术之一,它在20世纪末至21世纪初引领了全球移动通信技术的发展,为移动互联网的兴起奠定了基础。WCDMA是GSM网络演进的重要...

Global site tag (gtag.js) - Google Analytics