मैं एक छोटे से निजी प्रोजेक्ट को कोड करके गो सीख रहा हूं। भले ही यह छोटा है, मैंने शुरू से ही गो पर अच्छी आदतें सीखने के लिए कठोर इकाई परीक्षण करने का फैसला किया।
तुच्छ इकाई परीक्षण सभी ठीक और बांका था, लेकिन मैं अब निर्भरता से हैरान हूँ; मैं कुछ फंक्शन कॉल को नकली वाले के साथ बदलने में सक्षम होना चाहता हूं। यहाँ मेरे कोड का एक स्निपेट है:
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])
}
}
मैं वास्तव में http के माध्यम से एक पृष्ठ प्राप्त किए बिना डाउनलोडर () का परीक्षण करने में सक्षम होना चाहता हूं - अर्थात या तो get_page (जब से यह केवल पृष्ठ सामग्री को एक स्ट्रिंग के रूप में लौटाता है) या http.Get ()।
मुझे यह धागा मिला: https://groups.google.com/forum/# .topic/ golang- nuts/ 6AN1E2CJOxI जो एक समान समस्या के बारे में लगता है। जूलियन फिलिप्स अपनी लाइब्रेरी, Withmock ( http://github.com/qur/withmock ) को एक समाधान के रूप में प्रस्तुत करता है , लेकिन मैं इसे काम करने में असमर्थ पा रहा हूं। यहाँ मेरे परीक्षण कोड के प्रासंगिक भाग हैं, जो ईमानदार होने के लिए बड़े पैमाने पर कार्गो पंथ कोड है:
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
}
परीक्षण आउटपुट निम्न है:
ERROR: Failed to install '_et/http': exit status 1
output:
can't load package: package _et/http: found packages http (chunked.go) and main (main_mock.go) in /var/folders/z9/ql_yn5h550s6shtb9c5sggj40000gn/T/withmock570825607/path/src/_et/http
Withmock मेरी परीक्षण समस्या का समाधान है? मुझे इसे काम करने के लिए क्या करना चाहिए?