package main import ( "bytes" "io/ioutil" "net/http" "net/http/httptest" "os/exec" "testing" ) func Test_routing(t *testing.T) { ts := httptest.NewServer(NewRouter()) defer ts.Close() resp, err := http.Get(ts.URL + "/books") if err != nil { t.Fatal(err) } got := resp.StatusCode exp := http.StatusOK if got != exp { t.Errorf("Got %v, expected %v", got, exp) } gotContentType := resp.Header.Get("Content-Type") if gotContentType != "application/json" { t.Errorf("Unexpected content-type: %s", gotContentType) } body, err := ioutil.ReadAll(resp.Body) if err != nil { t.Fatal(err) } if bytes.Index(body, []byte("message")) < 0 { t.Errorf("Missing %q in %s", "message", string(body)) } } func Test_build_and_start(t *testing.T) { out, err := exec.Command(GOBINARY, "build").CombinedOutput() if err != nil { t.Fatal(err, string(out)) } cmd := exec.Command("./app") err = cmd.Start() if err != nil { t.Fatal(err) } err = cmd.Process.Kill() if err != nil { t.Fatal(err) } }