Ubuntu 12.04.1 ラップトップで go 1.0.3 を実行していますが、main() でコードを実行すると、go test で実行した場合とは動作が大きく異なるという問題に遭遇しました。
これが私の例です:
main.goから
package main
import (
"image"
"image/jpeg"
"fmt"
"myproj/htmlutil"
[some imports removed]
)
func main() {
img, err := htmlutil.GetResizedImageFromWeb("http://img.foodnetwork.com/FOOD/2011/05/04/FNM_060111-OOT-B005_s4x3.jpg")
if err != nil {
fmt.Println("There was a problem ",err)
}
fmt.Println("Bounds were ",img.Bounds())
}
myproj/htmlutil_test.go から
package htmlutil
import (
"image"
"fmt"
"testing"
[some imports removed]
)
func TestGetImageFromURL(t *testing.T){
img, err := GetResizedImageFromWeb("http://img.foodnetwork.com/FOOD/2011/05/04/FNM_060111-OOT-B005_s4x3.jpg")
if err != nil {
t.Fatalf("There was a problem %q",err)
}
fmt.Println("Bounds were ",img.Bounds())
}
彼らが呼び出す関数、GetResizedImageFromWeb() は myproj/htmlutil.go にあります。
package htmlutil
import (
"errors"
"fmt"
"image"
"io/ioutil"
"net/http"
[some imports removed]
)
func GetResizedImageFromWeb(imageURL string) (image.Image, error) {
resp, err := http.Get(imageURL)
if err != nil {
return nil, errors.New(fmt.Sprint("There was a problem reading the site %q Debug[%s]",imageURL, err))
}
defer resp.Body.Close()
//Decode the image using image's general purpose decoder
image, s, err := image.Decode(resp.Body)
if err != nil {
return nil, err
}
return resizeImage(image), nil
}
コマンド ラインから「go run main.go」を実行すると、url から画像の境界が表示され、main.go の関数を使用したい場合は、画像を jpg ファイルとしてディスクに保存できます。ただし、htmlutil パッケージから「go test」を実行すると、次のエラーが発生します。
There was a problem "image: unknown format"
単体テストでのみ失敗する問題の原因は何ですか? 私は何を間違っていますか?
私の唯一の推測は、何らかの理由で html.Get() がテスト シナリオですべてのデータを返さないということですが、なぜそれが起こるのかについてはまだ困惑しています。