Ich bin gerade dabei, einige Komponententests für meinen Dienst in Go zu erstellen, sowie andere Funktionen, die auf dieser Funktionalität aufbauen, und ich frage mich, was ist der beste Weg zum Komponententest das in Go? Mein Code sieht so aus:Komponententest in Golang
type BBPeripheral struct {
client *http.Client
endpoint string
}
type BBQuery struct {
Name string `json:"name"`
}
type BBResponse struct {
Brand string `json:"brand"`
Model string `json:"model"`
...
}
type Peripheral struct {
Brand string
Model string
...
}
type Service interface {
Get(name string) (*Peripheral, error)
}
func NewBBPeripheral(config *peripheralConfig) (*BBPeripheral, error) {
transport, err := setTransport(config)
if err != nil {
return nil, err
}
BB := &BBPeripheral{
client: &http.Client{Transport: transport},
endpoint: config.Endpoint[0],
}
return BB, nil
}
func (this *BBPeripheral) Get(name string) (*Peripheral, error) {
data, err := json.Marshal(BBQuery{Name: name})
if err != nil {
return nil, fmt.Errorf("BBPeripheral.Get Marshal: %s", err)
}
resp, err := this.client.Post(this.endpoint, "application/json", bytes.NewBuffer(data))
if resp != nil {
defer resp.Body.Close()
}
if err != nil {
return nil, err
}
if resp.StatusCode != http.StatusOK {
return nil, fmt.Errorf(resp.StatusCode)
}
var BBResponse BBResponse
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
err = json.Unmarshal(body, &BBResponse)
if err != nil {
return nil, err
}
peripheral := &Peripheral{}
peripheral.Model = BBResponse.Model
if peripheral.Model == "" {
peripheral.Model = NA
}
peripheral.Brand = BBResponse.Brand
if peripheral.Brand == "" {
peripheral.Brand = NA
}
return peripheral, nil
}
ist der effizienteste Weg, um diesen Code zu testen und den Code, der diese Funktionen verwendet eine separate goroutine spin up wie der Server zu fungieren, verwenden http.httptest Paket, oder etwas anderes? das ist das erste Mal, dass ich versuche, einen Test zu schreiben, dann weiß ich nicht wirklich wie.
Go verfügt über eigene Testwerkzeuge. Sehen Sie hier https://golang.org/pkg/testing/ ... Wenn Sie auf Github herumspielen, um andere gut genutzte Go-Pakete zu sehen, werden Sie oft Dateien finden, die mit _test.go enden. Diese Dateien sind für Komponententests, aber unter Verwendung des Cmd-Go-Tests und unter Verwendung des Testpakets. Auch das von Ihnen erwähnte Paket ist ein guter Anfang. Nach dem Test, da dies ein Server ist, würde ich wahrscheinlich einen Belagerungstest durchführen, um den Server zu belasten, um zu sehen, wie er mit https://www.joedog.org/siege-home/ umgehen kann. – reticentroot