測試 v0 當我們第一次開始構建Sourcegraph,我們以最容易跑起來的方式寫了測試。每一個測試都將進入資料庫對測試API端點發起HTTP GET請求。測試會解析HTTP返回內容並和預期資料進行對比。一個典型的v0測試如下: func TestListRepositories(t *testing.T) { tests := []struct { url string; insert []interface{}; want []*Repo }{ {"/repos", []*Repo{{Name: "foo"}}, []*Repo{{Name: "foo"}}}, {"/repos?lang=Go", []*Repo{{Lang: "Python"}}, nil}, {"/repos?lang=Go", []*Repo{{Lang: "Go"}}, []*Repo{{Lang: "Go"}}}, } db.Connect() s := http.NewServeMux() s.Handle("/", router) for _, test := range tests { func() { req, _ := http.NewRequest("GET", test.url, nil) tx, _ := db.DB.DbMap.Begin() defer tx.Rollback() tx.Insert(test.data...) rw := httptest.NewRecorder() rw.Body = new(bytes.Buffer) s.ServeHTTP(rw, req) var got []*Repo json.NewDecoder(rw.Body).Decode(&got) if !reflect.DeepEqual(got, want) { t.Errorf("%s: got %v, want %v", test.url, got, test.want) } }() }} 一開始這麼寫測試簡單易行,但隨著app進化會變得痛苦。 隨著時間推移,我們加入了新特性。更多的特性導致更多的測試,更長的已耗用時間,延長了我們的dev周期。更多的特性也需要改變和添加新的URL路徑(現在大概有75個),大都相當複雜。 Sourcegraph的每一層內部也變得更加複雜,所以我們想獨立於其他層做測試。 |
鑫鑫鑫 翻譯於 4 天 前 0人頂 頂 翻譯的不錯哦! |