写点什么

测试驱动开发英制单位转换

用户头像
escray
关注
发布于: 2020 年 05 月 07 日
测试驱动开发英制单位转换

2020-05-07



昨天发了一个乞丐版的测试驱动开发英制单位转换,我觉得之所以是“乞丐”主要有两点,一个是拿到题目之后不知道如何拆分任务,如何开始测试;另一个问题是如何发展自己的想法。



今天看了 @熊节 老师给的标准答案,发现其实一开始起步的时候,我貌似比较接近正确的路线,但是后来却走偏了。也许经过多次重构,也能走回到“光明”的大路,但终究还是兜了圈子的。



以下是标准答案:



// Length.java
import org.junit.Test;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
public class LengthTest {
@Test
public void should_1_inch_equal_to_1_inch() {
Length inch = new Length(1, Unit.Inch);
assertThat(inch, is(new Length(1, Unit.Inch)));
}
@Test
public void should_1_foot_equal_to_12_inches() {
assertThat(new Length(1, Unit.Foot), is(new Length(12, Unit.Inch)));
}
@Test
public void should_1_yard_equals_to_3_feet() {
assertThat(new Length(1, Unit.Yard), is(new Length(3, Unit.Foot)));
assertThat(new Length(2, Unit.Yard), is(new Length(72, Unit.Inch)));
}
}
// Unit.java
public class Unit {
public static Unit Inch = new Unit(1);
public static Unit Foot = new Unit(12);
public static Unit Yard = new Unit(36);
private int transitionRateToInches;
private Unit(int transitionRateToInches) {
this.transitionRateToInches = transitionRateToInches;
}
int getAmountInInches(int rawAmount) {
return rawAmount * transitionRateToInches;
}
}
// Length.java
public class Length {
private int amountInInches;
public Length(int rawAmount, Unit unit) {
this.amountInInches = unit.getAmountInInches(rawAmount);
}
@Override
public boolean equals(Object object) {
Length another = (Length)object;
return this.amountInInches == another.amountInInches;
}
}



赠送四句重构口诀:



旧的不变

新的创建

一步切换

旧的再见



然后在 B 站看到了关于斐波那切数列的测试驱动开发演示,一开始也都还好,但是到了最后一部分,不小心掉进了“如何在 IntelliJ IDEA 中导入 JUnit 5.6.2 ”的坑里,到现在还没有爬出来。



明天实战营这边好像就要开第二个项目了,而我上次就这在这个地方折戟沉沙。



发布于: 2020 年 05 月 07 日阅读数: 42
用户头像

escray

关注

Let's Go 2017.11.19 加入

大龄菜鸟项目经理

评论

发布
暂无评论
测试驱动开发英制单位转换