learn Go with tests学习笔记(1)——Hello world

本文介绍了Go语言的测试框架,包括如何编写测试用例,TDD(测试驱动开发)的工作流程,以及编写测试的规则。强调了测试用例的结构和命名规范,以及如何通过测试助手函数提高代码可读性。此外,还讨论了函数的命名返回值和Go的switch语句等语法特性。
摘要由CSDN通过智能技术生成

Hello world

知识点概括

  1. 一些Go语法
    • 如何编写测试tests
    • 声明包含参数列表和返回值类型的函数
    • ifconstswitch
    • 声明变量variables和常量constants
  2. TDD(Test Driven Development)设计模式
    1. 编写一个注定fail的测试,并观察它是如何fail的。从而确保我们编写的测试与任务相关,并且该测试能够提供简单易懂的failure描述
    2. 用最少量的代码让测试pass,确保程序可运行
    3. 基于test的安全性进行重构,优化使得代码更加鲁棒、可读、人性化。。。

编写tests的规则

  • It needs to be in a file with a name like xxx_test.go
  • The test function must start with the word Test
  • The test function takes one argument only t *testing.T
  • In order to use the *testing.T type, you need to import "testing"

类型为 *testing.T 的变量 t 是你伸到测试框架中的 hook,所以当你想让测试失败时可以执行 t.Fail() 之类的操作。我们调用 tErrorf 方法打印一条消息并使测试fail。f 表示格式化,它允许我们构建一个字符串,并将值插入占位符值 %q 中。当你的测试失败时,它能够让你清楚是什么错误导致的。

扩展知识:占位符

对一个事情建立不同场景的子测试subtests,这种方法的好处是,你可以建立在其他测试中也能够使用的共享代码。通常不同的子测试里需要使用相同的断言assertion。可以通过重构将断言提取为function,这样可以减少重复并且增强代码可读性。

func assertCorrectMessage(t testing.TB, got, want string) {
	t.Helper()
	if got != want {
		t.Errorf("got %q want %q", got, want)
	}
}

helper function需要传入一个t *testing.T参数从而在必要的时候让测试代码fail。更加推荐使用t testing.TB,这是一个t *testing.Tt *testing.B都满足的interface。我们需要使用t.Helper() 告诉测试套件这个方法是一个helper,这样可以避免fail行号提示出现在helper方法中。

TDD准则

  • 编写test
  • 使得编译通过
  • 运行测试,看到测试fail并且确保输出的error message有意义
  • 编写足够的代码使得测试pass
  • 重构

关于返回值

//函数名称以小写字母开头。在 Go 中,公共函数以大写字母开始,私有函数以小写字母开头。我们不希望我们算法的内部结构暴露给外部,所以我们将这个功能私有化。
func greetingPrefix(language string) (prefix string) {
    switch language {
    case french:
        prefix = frenchHelloPrefix
    case spanish:
        prefix = spanishHelloPrefix
    default://如果没有其他case语句匹配,将会执行default分支。
        prefix = englishHelloPrefix
    }
    return
}
  • 在我们的函数签名中,我们使用了 ==命名返回值==named return value(prefix string)。一般只有在从上下文无法清楚知道返回值具体含义的时候采用命名返回值。

  • 这将在你的函数中创建一个名为 prefix 的变量。

    • 它将被分配「零」值。这取决于类型,例如 int 是 0,对于字符串它是 ""

    • 你只需调用 return 而不是 return prefix 即可返回所设置的值。(只针对命名返回值)

    • 这将显示在 Go Doc 中,所以它使你的代码更加清晰。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洞爷湖dyh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值