TDD(测试驱动开发)Dev练功房代码优雅

TDD和重构练习-FizzBuzz Sprint 2 - 快速变

2019-05-15  本文已影响12人  CodingDetails

FizzBuzz

Sprint 2

操作分解

第1组操作:实现PBI1

public static List<Playable> all() {
    return Arrays.asList(
            DivRule.create(3, "Fizz"),
            DivRule.create(5, "Buzz"),
            HasRule.create(3, "Fizz")
    );
}

使用Alt+Enter快速生成HasRule类和create方法
实现create方法和重载的exec方法,代码如下:

public class HasRule implements Playable {
    private int input;
    private final String output;

    public HasRule(int in, String out) {
        this.input = in;
        this.output = out;
    }

    public static HasRule create(int in, String out) {
        return new HasRule(in, out);
    }

    @Override
    public String play(int i) {
        if (String.valueOf(i).contains(String.valueOf(this.input))) return this.output;
        return "";
    }
}

此时运行测试,仍然不能通过,或者你不去运行也知道还不足以通过测试,但也要去运行一下,给下一步做什么提供明确指示,谓之-TDD。
错误如下:
expected: <Fizz> but was: <FizzFizz>

可以看出这是第二条测试数据3 Fizz,同时满足2条规则,然后组合后生成的;
所以在组合规则时,需要添加一个先去重的逻辑,然后再进行拼接。

public class FizzBuzz {
    private final int value;

    public FizzBuzz(int i) {
        this.value = i;
    }

    @Override
    public String toString() {
        return Rules.all()
                .stream()
                .map(rule -> rule.exec(this.value))
                .filter(value -> !value.isEmpty())
                .distinct()  // 新增去重逻辑
                .reduce(String::concat)
                .orElse(String.valueOf(this.value));
    }
}

第2组操作:实现PBI2

public static List<Playable> all() {
    return Arrays.asList(
            DivRule.create(3, "Fizz"),
            DivRule.create(5, "Buzz"),
            HasRule.create(3, "Fizz"),
            HasRule.create(5, "Buzz")
    );
}

第3组操作:实现PBI3

Over

上一篇下一篇

猜你喜欢

热点阅读