我在Go中構建了一個快速且簡單的API,用於查詢ElasticSearch。現在我知道它可以完成,我想通過添加測試正確地做到這一點。我已經抽象了一些代碼,以便它可以進行單元測試,但是我一直在嘲笑彈性庫,因此我認爲如果我嘗試一個簡單的例子來嘲笑它,那將是最好的。Golang使用彈性模擬
import (
"encoding/json"
"github.com/olivere/elastic"
"net/http"
)
...
func CheckBucketExists(name string, client *elastic.Client) bool {
exists, err := client.IndexExists(name).Do()
if err != nil {
panic(err)
}
return exists
}
而且現在的測試...
import (
"fmt"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
"testing"
)
type MockClient struct {
mock.Mock
}
func (m *MockClient) IndexExists(name string) (bool, error) {
args := m.Mock.Called()
fmt.Println("This is a thing")
return args.Bool(0), args.Error(1)
}
func TestMockBucketExists(t *testing.T) {
m := MockClient{}
m.On("IndexExists", "thisuri").Return(true)
>> r := CheckBucketExists("thisuri", m)
assert := assert.New(t)
assert.True(r, true)
}
爲了這,我產生了具有以下錯誤:。
我假設這是我使用elastic.client類型的基本原理,但我仍然是一個noob過多。
這是我最初的問題,自從我多年前發佈以來,我沒有做太多的工作。 [CodeReviewComments#Interfaces](https://github.com/golang/go/wiki/CodeReviewComments#interfaces)表明外部庫應該實現該結構,並且用戶應該在該結構上定義一個接口,並使用dep注射。其中,指出你在帖子中提到的第一個解決方案! – user2402831 2018-01-21 23:10:05