`
oray2011
  • 浏览: 7289 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

TDD练习

    博客分类:
  • TDD
阅读更多

今天在收集中看到一道面试题,网络引用是:http://www.iteye.com/topic/954262。题是这样的:

 

如何编程实现:输入M,N两个数,从1至N开始循环数数,每数到M输出该数值,直至全部输出。例如M是3,N是20,那么相当有20个人,1,2,3循环报数,数到3的就打印出他的序号,直到所有这20个数全部输出为止。

题目摘自:http://jerval.iteye.com/blog/1068563

尝试使用TDD编写产品代码,在实现时发现测试覆盖率不够;有哪位大虾能说说测试粒度该怎样规划?

测试代码:

public class DeliverTest {
    @Test
    public void onePlayer() throws Exception {
        Deliver deliver = new Deliver(1);
        assertArrayEquals(new int[]{1}, deliver.play(2));
        assertArrayEquals(new int[]{1}, deliver.play(-1));
    }

    @Test
    public void twoPlayers() throws Exception {
        Deliver deliver = new Deliver(2);
        assertArrayEquals(new int[]{2, 1}, deliver.play(2));
        assertArrayEquals(new int[]{1,2},deliver.play(1));
    }

    @Test
    public void manyPlayers() throws Exception {
        Deliver deliver=new Deliver(20);
        System.out.println(Arrays.toString(deliver.play(3)));
    }
}

 代码:

public class Deliver {
    public static final int FIRST_PLAYER = 0;
    public static final int FIRST_NUMBER = 1;
    private int[] evicted;
    private int evictPos;
    private int repeat;
    private int[] players;
    private int current;

    public Deliver(int count) {
        evicted = new int[count];
    }

    private void reInit(int repeat) {
        evictPos = 0;
        this.repeat = repeat;
        players = createPlayers();
        current = FIRST_PLAYER;
    }

    private int[] createPlayers() {
        int count = evicted.length;
        int[] players = new int[count];
        for (int k = 0; k < count; k++)
            players[k] = k + FIRST_NUMBER;
        return players;
    }

    public int[] play(int repeat) {
        reInit(repeat);
        replay();
        return evicted;
    }

    private void replay() {
        talk(FIRST_NUMBER);
    }

    private void talk(int numberOff) {
        if (shouldEvict(numberOff)) {
            evict();
            return;
        }
        deliver(numberOff);
    }

    private boolean shouldEvict(int numberOff) {
        return numberOff >= repeat;
    }

    private void evict() {
        evicted[evictPos++] = players[current];
        if (isOnePlayerOnly())
            return;
        players = remove(current);
        replay();
    }

    private boolean isOnePlayerOnly() {
        return players.length == 1;
    }

    private int[] remove(int index) {
        int[] remaining = new int[players.length - 1];
        int next = index + 1;
        System.arraycopy(players, FIRST_PLAYER, remaining, FIRST_PLAYER, index);
        System.arraycopy(players, next, remaining, index, players.length - next);
        return remaining;
    }

    private void deliver(int numberOff) {
        current = nextPlayer();
        talk(numberOff + 1);
    }

    private int nextPlayer() {
        int next = current + 1;
        return next >= players.length ? FIRST_PLAYER : next;
    }

}
 
分享到:
评论
3 楼 oray2011 2011-06-03  
抛出异常的爱 写道
引用
@Test  
    public void manyPlayers() throws Exception {  
        Deliver deliver=new Deliver(20);  
        System.out.println(Arrays.toString(deliver.play(3)));  
    } 

这个叫测试么?

这不是测试,这是这个问题的答案~!虽然可读性比较强,但我觉得这个测试是有问题的,测试粒度太大;我应该如何着手编写粒度适中的测试,希望大家给出各自的意见~!
2 楼 william_ai 2011-06-03  
人肉测试。。。。
1 楼 抛出异常的爱 2011-06-03  
引用
@Test  
    public void manyPlayers() throws Exception {  
        Deliver deliver=new Deliver(20);  
        System.out.println(Arrays.toString(deliver.play(3)));  
    } 

这个叫测试么?

相关推荐

    katas:使用TDD的Kata练习

    TDD练习 安装 git clone https://github.com/ETombuyses/Katas.git cd Katas npm install 卡塔斯 钻石 编写一个函数,以给定菱形给定的宽度n (非null,奇数,自然整数)显示菱形。 n = 7示例: * * * * * * * *...

    String-Calculator:TDD练习-软件工程

    在这个"String-Calculator:TDD练习-软件工程"项目中,我们将会深入探讨如何使用Java进行TDD开发,并通过具体案例——字符串计算器,来理解这一方法。 首先,让我们理解什么是字符串计算器。这是一个简单的概念,即...

    TDD-Parking:TDD练习-停车收费计算器

    TDD练习-停车收费计算器 该项目的目的是使用测试驱动开发在Core Java中构建一个简单的应用程序。 尽管实际应用程序可能包含前端层,服务层和数据访问层,但本练习旨在仅构建服务层。 ==&gt;业务要求每小时停车费为: ...

    bowling_kata:鲍伯叔叔的保龄球Kata TDD练习的版本(略有不同)

    总之,“鲍伯叔叔的保龄球Kata”是一个经典的TDD练习,涵盖了编程、设计和测试的多个方面,对于任何希望提升其编程技能的人来说都是一个宝贵的学习资源。通过完成这个练习,开发者可以深化对TDD的理解,提升代码质量...

    TDD-KentBeck-multiCurrencyMoney:基于贝克的书的 TDD 练习,在第 10 章之后没有遵循他的步骤

    基于贝克的书的 TDD 练习,在第 10 章之后没有遵循他的步骤 当我开始阅读 kent beck 所著的《TDD By Example》一书时,我觉得我会在Eclipse时跟随他的练习。 由于这不是我的第一次 TDD 阅读和练习,我觉得我可以在...

    tdd-exercise:一些学习TDD的练习

    在这个名为“tdd-exercise”的项目中,我们看到它是一个专门为学习TDD设计的练习集,可能包含了多个小任务或问题,每个都需要通过TDD的方式来解决。使用JavaScript作为主要编程语言,这为Web开发和前端应用提供了...

    JUnitPractice:JUnit5和TDD练习

    这是Rahul Sharma和Shekhar Gulati撰写的《使用JUnit 5进行Java单元测试:使用JUnit 5进行测试驱动的开发》一书的一个项目。计划使用JUnit 5进行练习并实施“测试驱动开发”。

    ses-tdd-exercise-1-template-源码.rar

    描述中的信息虽然简洁,但我们可以从中推测,这个压缩包可能包含了一个用于TDD练习的初始代码结构,可能是为了帮助学习者理解如何在实际项目中应用TDD原则。 由于标签为空,我们无法直接获取额外的分类信息,但我们...

    NaturalLanguageTDD:TDD练习

    做TDD动作的骨骼。 端点/ api / time将以自然语言格式返回当前时间。 目的不是要构建机器人或IA,而是要使用TDD来使代码响应越来越复杂的时间组合。 示例:16:20应该返回“二十点四点” 17:00应该返回“五点钟” ...

    lab-tdd:Java自动化测试与TDD课程练习实验室

    在“lab-tdd-master”文件夹中,我们可以期待找到一系列的Java源代码文件和测试用例,这些用例可能覆盖了各种TDD练习,如简单的数学操作、数据结构处理、或者更复杂的业务逻辑。每个练习都鼓励开发者遵循TDD的原则,...

    ICanCode:SQLI 摩洛哥的 TDD 练习

    我对 SQLI 的 I Can Code 练习的谦虚回应: ://icancode.sqli.com/participer.html 语境 在使用 PHP/Symfony 进行了至少 8 个月的全职编程之后,我需要回到 Java 并让我的大脑 JVM 编译器保持活力……而且这个周末...

    tdd-bed-karma-mocha-browserify-espower-coffee:使用Karma,Mocha,PhantomJS,CoffeeScript和Power Assert进行TDD练习的最低基础

    标题中的“tdd-bed-karma-mocha-browserify-espower-coffee”是一个项目名称,它代表了一个使用测试驱动开发(TDD)方法的实践环境。这个环境整合了多个工具和技术,以便于JavaScript和CoffeeScript的开发。以下是每...

    CalcKata:用于练习 TDD 和结对编程的字符串计算器 kata

    用于 TDD 和结对编程练习的字符串计算器 kata。 入门 确保您安装了最新的软件包 npm install bower install 注意:如果你没有安装npm ,请确保你已经安装了 。 如果你没有凉亭, npm install -g bower 。 上述步骤...

    name-normalizer:TDD数字绘画练习

    这些旨在作为第一个TDD练习。 通过为您指定的一系列家庭友好测试序列,这是了解TDD的增量增长方面(这不是TDD的全部内容)的一种很好的介绍性方法。 感谢James Grenning的技术! 要重点关注的主要内容: 编写的...

    tdd-kata:TDD kata实施的集合

    在这个目录下,我们可以期待找到各个kata的子目录,每个子目录代表一个独立的TDD练习。这些目录可能包含了测试文件(如JUnit测试)、实现文件以及相关的说明文档。开发者可以通过运行这些测试并逐步编写代码,来体验...

    tdd-bed-nodejs-mocha-espower-coffee:使用Node.js,Mocha,CoffeeScript和Power Assert进行TDD练习的最低基础

    准备npm安装npm运行读取npm run结果笔记在每个测试文件中都需要src文件。 需要在每个测试文件中断电。 (在每个src文件中编写global.Foo = Foo;如果您希望像使用浏览器一样对其进行测试)

    data-structures-and-algorithms:白板和TDD练习,用于掌握各种数据结构和算法

    数据结构和算法作者:Daniel Shelton版本:1.1.1概述此仓库是401 JS中分配的白板挑战的汇编。建筑学该应用程序利用了多个JS库,例如node.js,babel和jest。变更记录2018年4月17日上午7:30-反向阵列挑战赛已完成。...

    javascriptTest:为TDD练习和Javascirpt应用程序中测试的基础到高级技术保留的存储库

    测试Javascript应用程序 :information: 这个仓库是做什么用的? 该资料库将用于记录在FábioVedovelli大师课程期间获得的所有知识。 对于那些对课程感兴趣的人,我将保留直接链接到该页面的链接。...

    tdd-rest-demo

    TDD练习 获取修订版“具有基准测试失败的基础API”。 查看完成的测试并实施服务器端检查以使13个失败的测试通过! 以下修订为“所有测试均通过”。 有示例答案。 请注意,某些逻辑在业务或数据层中可能更合适,但这...

Global site tag (gtag.js) - Google Analytics