Bağımlılıklar konusunda kafam karıştı. Bazı işlev çağrılarını sahte olanlarla değiştirebilmek istiyorum. İşte kodumun bir parçası:
func get_page(url string) string {
get_dl_slot(url)
defer free_dl_slot(url)
resp, err := http.Get(url)
if err != nil { return "" }
defer resp.Body.Close()
contents, err := ioutil.ReadAll(resp.Body)
if err != nil { return "" }
return string(contents)
}
func downloader() {
dl_slots = make(chan bool, DL_SLOT_AMOUNT) // Init the download slot semaphore
content := get_page(BASE_URL)
links_regexp := regexp.MustCompile(LIST_LINK_REGEXP)
matches := links_regexp.FindAllStringSubmatch(content, -1)
for _, match := range matches{
go serie_dl(match[1], match[2])
}
}
downloader()
Aslında http üzerinden bir sayfa almadan test edebilmek istiyorum - yani alay ederek get_page
(sadece sayfa içeriğini bir dizge olarak döndürdüğü için daha kolay) veya http.Get()
.
Benzer bir sorunla ilgili görünen bu konuyu buldum . Julian Phillips bir çözüm olarak kitaplığı Withmock'u sunuyor , ancak işe yarayamıyorum . Dürüst olmak gerekirse, benim için büyük ölçüde kargo kült kodu olan test kodumun ilgili kısımları:
import (
"testing"
"net/http" // mock
"code.google.com/p/gomock"
)
...
func TestDownloader (t *testing.T) {
ctrl := gomock.NewController()
defer ctrl.Finish()
http.MOCK().SetController(ctrl)
http.EXPECT().Get(BASE_URL)
downloader()
// The rest to be written
}
Test çıktısı aşağıdaki gibidir:
HATA: '_et / http' yüklenemedi: çıkış durumu 1 çıktı: paket yüklenemiyor: paket _et / http: paketler http (chunked.go) ve main (main_mock.go)
/ var / klasörler / z9 / içinde bulundu ql_yn5h550s6shtb9c5sggj40000gn / T / withmock570825607 / yol / src / _et / http
Withmock, test sorunum için bir çözüm mü? Çalışması için ne yapmalıyım?