用测试驱动开发学算法

用户头像
escray
关注
发布于: 2020 年 05 月 13 日
用测试驱动开发学算法

2020-05-09



我是标题党,以后有机会可能会写一些这方面的文章。



今天试着用不完美的测试驱动开发,写了一道 LeetCode 上的题目,感觉还不错。说不完美,是因为并没有找特别多的测试用例,只使用了题目说明里面的两个简单的输入、输出。



今日任务:



完成【任务2:框定需求范围】



反思一下自己的乞丐版和标准版的差别,我觉的主要是在于没有想到要将命令行参数的框架和命令行字符串本身提取出来。按照 @熊节 老师的提示,就是要考虑别人如何使用你写的代码。



加入提供给对方的是一个 jar 包,然后我这边只考虑到对方传给我一段字符串即可,而这样的难度实际上是无限大的,因为对方可以给你传任何字符串。也许可以依靠文档或者口头的说明,但这明显不是一个好的靠谱的方式。



如果按照框架 schema 和内容 command 的形式来考虑,就会容易很多了。



其实也不只是单纯针对这个问题,很多时候,开发中遇到的问题都可以按照这个思路来考虑,抽取出一个框架,然后再对应填入内容。



我自己在理解需求和分解问题方面还是有需要学习的地方,也许多看一些程序的实现会好一些。



今天只放整体的测试代码和实现。



// ArgsTest.java
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class ArgsDemoTest {
@Test
void test_with_normal() {
ArgsDemo args = new ArgsDemo("l:bool,d:string,p:int", "-l true -d /usr/local -p 8080");
assertEquals(Boolean.TRUE, args.getValue("l"));
assertEquals("/usr/local", args.getValue("d"));
assertEquals(8080, args.getValue("p"));
}
@Test
void test_with_number() {
ArgsDemo args = new ArgsDemo("l:bool,d:string,p:int", "-l -p -9 -d /usr/local");
assertEquals(Boolean.FALSE, args.getValue("l"));
assertEquals("/usr/local", args.getValue("d"));
assertEquals(-9, args.getValue("p"));
}
}
// Args.java
public class ArgsDemo {
private final Schema schema;
private final Command command;
public ArgsDemo(String schema, String command) {
this.schema = new Schema(schema);
this.command = new Command(command);
}
public Object getValue(String name) {
return schema.getValue(name, command.getValue(name));
}
}



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

escray

关注

Let's Go 2017.11.19 加入

大龄程序员

评论

发布
暂无评论
用测试驱动开发学算法