私は現在、Goでのサービスのための単体テストやその機能の上に構築されている他の関数を作成していますが、単体テストそれはゴー?私のコードは次のようになります。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
}
このコードとパッケージをhttp.httptest使用し、サーバーのように行動するために別のゴルーチンをスピンアップするために、これらの機能を使用するコード、または何か他のものをテストするための最も効率的な方法ですか?それは私が本当にどのように知っていないテストを書くことを試みることは初めてです。
ゴーは、それがテストツールに組み込まれています所有しています。こちらをご覧くださいhttps://golang.org/pkg/testing/ ...うまく使用されている他のgoパッケージを見るためにgithubを見て回ると、_test.goで終わるファイルを見つけることがよくあります。これらのファイルは単体テスト用ですが、cmd goテストとテストパッケージを使用しています。また、あなたが言及したパッケージは、始めるのにも良い場所です。あなたのテストの後、これはサーバーなので、私は恐らくSiegeテストをフォローしてサーバーに何らかのストレスを加え、https://www.joedog.org/siege-home/ – reticentroot