概述
这里将记录, 学习 Learn Go with tests 的学习心得, 通过这个项目的学习了解如何利用测试用例的形式对代码进行重构, 要经常对你的已有代码进行重构.
学习的参考
https://studygolang.gitbook.io/learn-go-with-tests/
https://quii.gitbook.io/learn-go-with-tests/go-fundamentals/hello-world
中文版本的网站已经有好久没有更新了, 学习以英文网站为主.
我的练习代码库:https://gitee.com/kmyss/learn-go-with-tests.git
安装go
摘录自原文
本书的重心在于重构的重要性。 好的工具可以帮你放心地进行大型的重构。 你应该足够熟悉你的编辑器,以便使用简单的组合键执行以下操作:
- 提取/内联变量。能够找出魔法值(magic value)并给他们一个名字可以让你快速简化你的代码。
- 提取方法/功能。能够获取一段代码并提取函数/方法至关重要。
- 改名。你应该能够自信地对多个文件内的符号批量重命名。
- 格式化。Go 有一个名为
go fmt的专有格式化程序。你的编辑器应该在每次保存文件时都运行它。- 运行测试。毫无疑问,你应该能够做到以上任何一点,然后快速重新运行你的测试,以确保你的重构没有破坏任何东西。
另外,为了对你处理代码更有帮助,你应该能够:
- 查看函数签名 - 在 Go 中调用某个函数时,你应该了解并熟悉它。你的 IDE 应根据其文档,参数以及返回的内容描述一个函数。
- 查看函数定义 - 如果仍不清楚函数的功能,你应该能够跳转到源代码并尝试自己弄清楚。
- 查找符号的用法 - 能够查看被调用函数的上下文可以在重构时帮你做出决定。
运用好你的工具将帮助你专注于代码并减少上下文切换。
Hello World
- 为了测试的必要性我们将 hello world 的字符串设计到一个函数中.
- 将重复的代码提取成函数
- 将字面量提取为常量
- 重构要在任何时候进行
- TDD 的基本流程熟悉:
- 编写一个测试
- 让编译通过
- 运行测试,查看失败原因并检查错误消息是很有意义的
- 编写足够的代码以使测试通过
- 重构
- 保证函数功能的单一性, 将生成前缀和生成
你好xx的功能划分为两个函数处理
小结:
- 写一个错误的测试用例, 运行看它的错误
- 编写最少量的代码使用例通过,以获得可以运行的程序
- 然后 重构代码,基于我们测试的安全性,以确保我们拥有易于使用的精心编写的代码
将代码的编写转换为编写小的测试用例, 在确保用例正确的情况下, 修改和重构你的重复代码.
Integers
- 编写函数时可以编写一个 example 用于说明函数的使用方式
再次熟悉 TDD 的编程工作流程
这里自己按照上述要求进行编写代码
测试用例如下: ```basic func TestRepeat(t *testing.T) { repeat := Repeat(“a”) expected := “aaaaa”
if repeat != expected {
t.Errorf("expected %q but got %q ", expected, repeat)
} }
- 完成函数的编写:```basicfunc Repeat(s string) string {out := sout += sout += sout += sout += sreturn out}
重构函数:
第一版
func Repeat(s string) string {out := ""for i := 0; i < 5; i++ {out += s}return out}
第二版 ```basic const repeatCount = 5
func Repeat(character string) string { repeated := “”
for i := 0; i < repeatCount; i++ {repeated += character}return repeated
} ```
- 练习题 全部完成
