3.05 路由树-静态匹配之路由查找
PART1. 定义查找路由的方法
// findRoute 根据给定的HTTP方法和路由路径,在路由森林中查找对应的节点
func (r *router) findRoute(method string, path string) (*node, bool) {
// 沿着树深度遍历
}PART2. 定义测试用例
2.1 在测试函数中注册路由
// TestNode 测试路由树节点
// 由于此处我们要测试的是路由树的结构,因此不需要在测试路由树节点中添加路由处理函数
// 调用addRoute时写死一个HandleFunc即可
type TestNode struct {
method string
path string
}
// TestRouter_findRoute 测试路由查找功能
func TestRouter_findRoute(t *testing.T) {
// step1. 构造路由树
testRoutes := []TestNode{}
r := newRouter()
mockHandleFunc := func(ctx Context) {}
for _, testRoute := range testRoutes {
r.addRoute(testRoute.method, testRoute.path, mockHandleFunc)
}
}2.2 构造测试用例
2.2.1 定义测试用例的类型
2.2.2 定义测试的过程
2.2.3 构造测试用例
PART3. 以TDD的方式开发findRoute()方法
findRoute()方法3.1 HTTP动词不存在的情况
3.1.1 实现
3.1.2 测试

3.2 完全命中的情况
3.2.1 实现
3.2.2 测试
3.3 命中了,但找到的node中,handler是nil的情况
3.4 根节点
3.4.1 测试

3.4.2 修bug



3.5 没有找到path
附录
Last updated