Go で JSON を使用するコードをテストすることは非常に重要であり、この記事では次の手順を説明します: JSON データを書き込み、json.Marshal を使用してバイト スライスにエンコードします。 JSON データをデコードし、json.Unmarshal を使用してバイト スライスから構造体まで解析します。
Golang で JSON を使用するコードをテストする方法
Golang で JSON を使用するコードをテストすることは、アプリケーションの堅牢性を確保するために重要です。この記事では、次のテスト手順を説明します:
1. JSON データを書き込む
import ( "encoding/json" "fmt" "testing" ) type Person struct { Name string `json:"name"` Age int `json:"age"` } func TestEncodeJSON(t *testing.T) { person := Person{Name: "John", Age: 30} b, err := json.Marshal(person) if err != nil { t.Errorf("Error encoding JSON: %v", err) } expected := `{"name":"John","age":30}` if string(b) != expected { t.Errorf("Expected '%s', got '%s'", expected, string(b)) } }
2. JSON データをデコードする
func TestDecodeJSON(t *testing.T) { jsonStr := `{"name":"Mary","age":25}` person := Person{} err := json.Unmarshal([]byte(jsonStr), &person) if err != nil { t.Errorf("Error decoding JSON: %v", err) } expected := Person{Name: "Mary", Age: 25} if person != expected { t.Errorf("Expected '%v', got '%v'", expected, person) } }
実際のケース
JSON 構成ファイルを読み取る関数を考えてみましょう。
func LoadConfig(path string) (Config, error) { b, err := ioutil.ReadFile(path) if err != nil { return Config{}, err } config := Config{} err = json.Unmarshal(b, &config) if err != nil { return Config{}, err } return config, nil }
次のテスト ケースは、LoadConfig
関数が JSON ファイルを正しく読み取ることを検証します:
func TestLoadConfig(t *testing.T) { // 创建一个包含 JSON 数据的临时文件 f, err := ioutil.TempFile("", "config") if err != nil { t.Errorf("Error creating temporary file: %v", err) } defer os.Remove(f.Name()) _, err = f.WriteString(`{"key":"value"}`) if err != nil { t.Errorf("Error writing to temporary file: %v", err) } if err := f.Close(); err != nil { t.Errorf("Error closing temporary file: %v", err) } config, err := LoadConfig(f.Name()) if err != nil { t.Errorf("Error loading config: %v", err) } expected := Config{Key: "value"} if config != expected { t.Errorf("Expected '%v', got '%v'", expected, config) } }
以上がGolang で JSON を使用してコードをテストするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。