今天在收集中看到一道面试题,网络引用是: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;
}
}
分享到:
相关推荐
TDD练习 安装 git clone https://github.com/ETombuyses/Katas.git cd Katas npm install 卡塔斯 钻石 编写一个函数,以给定菱形给定的宽度n (非null,奇数,自然整数)显示菱形。 n = 7示例: * * * * * * * *...
在这个"String-Calculator:TDD练习-软件工程"项目中,我们将会深入探讨如何使用Java进行TDD开发,并通过具体案例——字符串计算器,来理解这一方法。 首先,让我们理解什么是字符串计算器。这是一个简单的概念,即...
TDD练习-停车收费计算器 该项目的目的是使用测试驱动开发在Core Java中构建一个简单的应用程序。 尽管实际应用程序可能包含前端层,服务层和数据访问层,但本练习旨在仅构建服务层。 ==>业务要求每小时停车费为: ...
总之,“鲍伯叔叔的保龄球Kata”是一个经典的TDD练习,涵盖了编程、设计和测试的多个方面,对于任何希望提升其编程技能的人来说都是一个宝贵的学习资源。通过完成这个练习,开发者可以深化对TDD的理解,提升代码质量...
基于贝克的书的 TDD 练习,在第 10 章之后没有遵循他的步骤 当我开始阅读 kent beck 所著的《TDD By Example》一书时,我觉得我会在Eclipse时跟随他的练习。 由于这不是我的第一次 TDD 阅读和练习,我觉得我可以在...
在这个名为“tdd-exercise”的项目中,我们看到它是一个专门为学习TDD设计的练习集,可能包含了多个小任务或问题,每个都需要通过TDD的方式来解决。使用JavaScript作为主要编程语言,这为Web开发和前端应用提供了...
这是Rahul Sharma和Shekhar Gulati撰写的《使用JUnit 5进行Java单元测试:使用JUnit 5进行测试驱动的开发》一书的一个项目。计划使用JUnit 5进行练习并实施“测试驱动开发”。
描述中的信息虽然简洁,但我们可以从中推测,这个压缩包可能包含了一个用于TDD练习的初始代码结构,可能是为了帮助学习者理解如何在实际项目中应用TDD原则。 由于标签为空,我们无法直接获取额外的分类信息,但我们...
做TDD动作的骨骼。 端点/ api / time将以自然语言格式返回当前时间。 目的不是要构建机器人或IA,而是要使用TDD来使代码响应越来越复杂的时间组合。 示例:16:20应该返回“二十点四点” 17:00应该返回“五点钟” ...
在“lab-tdd-master”文件夹中,我们可以期待找到一系列的Java源代码文件和测试用例,这些用例可能覆盖了各种TDD练习,如简单的数学操作、数据结构处理、或者更复杂的业务逻辑。每个练习都鼓励开发者遵循TDD的原则,...
我对 SQLI 的 I Can Code 练习的谦虚回应: ://icancode.sqli.com/participer.html 语境 在使用 PHP/Symfony 进行了至少 8 个月的全职编程之后,我需要回到 Java 并让我的大脑 JVM 编译器保持活力……而且这个周末...
标题中的“tdd-bed-karma-mocha-browserify-espower-coffee”是一个项目名称,它代表了一个使用测试驱动开发(TDD)方法的实践环境。这个环境整合了多个工具和技术,以便于JavaScript和CoffeeScript的开发。以下是每...
用于 TDD 和结对编程练习的字符串计算器 kata。 入门 确保您安装了最新的软件包 npm install bower install 注意:如果你没有安装npm ,请确保你已经安装了 。 如果你没有凉亭, npm install -g bower 。 上述步骤...
这些旨在作为第一个TDD练习。 通过为您指定的一系列家庭友好测试序列,这是了解TDD的增量增长方面(这不是TDD的全部内容)的一种很好的介绍性方法。 感谢James Grenning的技术! 要重点关注的主要内容: 编写的...
在这个目录下,我们可以期待找到各个kata的子目录,每个子目录代表一个独立的TDD练习。这些目录可能包含了测试文件(如JUnit测试)、实现文件以及相关的说明文档。开发者可以通过运行这些测试并逐步编写代码,来体验...
准备npm安装npm运行读取npm run结果笔记在每个测试文件中都需要src文件。 需要在每个测试文件中断电。 (在每个src文件中编写global.Foo = Foo;如果您希望像使用浏览器一样对其进行测试)
数据结构和算法作者:Daniel Shelton版本:1.1.1概述此仓库是401 JS中分配的白板挑战的汇编。建筑学该应用程序利用了多个JS库,例如node.js,babel和jest。变更记录2018年4月17日上午7:30-反向阵列挑战赛已完成。...
测试Javascript应用程序 :information: 这个仓库是做什么用的? 该资料库将用于记录在FábioVedovelli大师课程期间获得的所有知识。 对于那些对课程感兴趣的人,我将保留直接链接到该页面的链接。...
TDD练习 获取修订版“具有基准测试失败的基础API”。 查看完成的测试并实施服务器端检查以使13个失败的测试通过! 以下修订为“所有测试均通过”。 有示例答案。 请注意,某些逻辑在业务或数据层中可能更合适,但这...