跳到主要内容

第十一课

如何看pr

打开 goland 编辑器,在菜单栏找到 Git 下拉框选择 Show Git log 如下图:

找到你要跳转的pr,比如找到我们要学习的第一个pr #17,右键选择checkout Revision,你会发现本地文件跳转到目标版本,同时编辑器右上方会显示修改的文件。点击 Changes to 9541867c 会显示3个文件夹,这就是这次pr修改的文件列表。

PR #17

Populate 'Kind' fields for all JSON requests.  This will facilitate better client side UX 大意是给所有的资源请求接口,返回Kind这个字段,对于客户端更加友好

我们可以在提交的 pr 中给ServiceList 这个结构体中添加了 JsonBase 这个内嵌对象,同时在ServiceRestStroage中给Kind字段赋值为cluster#service

// JSONBase is shared by all objects sent to, or returned from the client
type JSONBase struct {
Kind string `json:"kind,omitempty" yaml:"kind,omitempty"`
ID string `json:"id,omitempty" yaml:"id,omitempty"`
CreationTimestamp string `json:"creationTimestamp,omitempty" yaml:"creationTimestamp,omitempty"`
SelfLink string `json:"selfLink,omitempty" yaml:"selfLink,omitempty"`
}

PR #23

Add test to kubelet, coverage up to 37% 大意是给 kubelet 增加测试代码

  1. 首先将 KubeletServer 结构体中 Kubelet 变成 kubeletInterface 接口,方便后续测试时候mock
// kubeletInterface contains all the kubelet methods required by the server.
// For testablitiy.
type kubeletInterface interface {
GetContainerID(name string) (string, error)
GetContainerInfo(name string) (string, error)
}
  1. 添加了一个 kubelet_server_test.go 测试文件,用来测试 kubeletServer上的两个接口
  • /container 【获取容器配置】
  • /containerInfo 【获取容器详情】

这里注意 go语言测试 httpServer 的时候,经常会引用 httptest包下的 Newserver来创建个临时的服务器。

提示

测试您的代码是一种很好的做法,可以让开发人员有信心将其交付生产。单元和集成测试非常适合测试应用程序逻辑或独立的功能片段,但在应用程序的“边缘”还有其他代码区域更难测试,因为它们处理来自第三方的传入或传出请求派对。幸运的是,Go 在其标准库中嵌入了 httptest 包,这是一小组结构和函数,可帮助为应用程序的这些边缘创建端到端测试。

参考:https://bignerdranch.com/blog/using-the-httptest-package-in-golang/

作业地址:https://go.dev/play/p/_DALxIA55dn
作业要求:代码补全,实现单元测试

  • 注意你应该把Handle函数放一个名叫handler.go 的文件,同时把你的测试函数放到一个名叫 handler_test.go的文件
  • 你可以尝试在url中传5和3,获取这两个参数相加并返回8