আমি একটি ছোট ব্যক্তিগত প্রকল্প কোডিং করে গো শিখছি। এটি ছোট হলেও, শুরু থেকেই গোতে ভাল অভ্যাসগুলি শিখতে কঠোর ইউনিট পরীক্ষা করার সিদ্ধান্ত নিয়েছি।
তুচ্ছ ইউনিট পরীক্ষাগুলি সবই ভাল এবং জঘন্য ছিল, তবে আমি এখন নির্ভরতা নিয়ে আশ্চর্য হয়েছি; আমি কিছু ফাংশন কলকে মোকগুলির সাথে প্রতিস্থাপন করতে সক্ষম হতে চাই এখানে আমার কোডের একটি স্নিপেট রয়েছে:
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 এর মাধ্যমে কোনও পৃষ্ঠা না পেয়েই ডাউনলোডার () পরীক্ষা করতে সক্ষম হতে চাই - অর্থাত্ গেট_পেজ (যেহেতু এটি কেবল পৃষ্ঠার সামগ্রীটিকে স্ট্রিং হিসাবে ফিরিয়ে দেয়) তামাশা করে বা http.Get () এর মাধ্যমে উপহাস করে।
আমি এই থ্রেডটি পেয়েছি: https://groups.google.com/forum/#!topic/golang-nuts/6AN1E2CJOxI যা একই ধরণের সমস্যা বলে মনে হচ্ছে। জুলিয়ান ফিলিপস তার লাইব্রেরি, উইন্ডমক ( http://github.com/qur/withmock ) একটি সমাধান হিসাবে উপস্থাপন করেছেন , তবে আমি এটি কার্যকর করতে পারিনি। এখানে আমার টেস্টিং কোডের প্রাসঙ্গিক অংশগুলি রয়েছে, যা আমার কাছে বেশিরভাগ ক্ষেত্রে কার্গো কাল্ট কোড honest
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
উইন্ডমক কি আমার পরীক্ষার সমস্যার সমাধান? এটির কাজ পেতে আমার কী করা উচিত?