我應該如何對以下代碼進行單元測驗。我試圖使用 coutnerfiter 來偽造輸入“* s3.S3”物件,但它對我不起作用。我是 coutnerfiter 和 Go 的新手,有人可以幫助我嗎?
func (l *listContentImp) ListS3Content(client *s3.S3) (bool, error) {
listObj := &s3.ListObjectsV2Input{
Bucket: aws.String(l.bucket),
}
var err error
l.lObj, err = client.ListObjectsV2(listObj)
if err != nil {
return false, err
}
return true, nil
}
uj5u.com熱心網友回復:
您不應該傳遞對s3.S3結構的參考。使用適用于 Go v1 的 AWS 開發工具包時,您通常會傳遞服務對應的介面。對于 S3,這是s3iface。
您的函式的簽名如下所示:
func (l *listContentImp) ListS3Content(client s3iface.S3API) (bool, error)
現在,您傳遞的每個實作了至少一種方法的結構s3iface.S3API都將起作用。
在運行時,您將傳遞正確的服務客戶端,但在單元測驗中,您可以只傳遞一個模擬:
type mock struct {
s3iface.S3API
output *s3.ListObjectsV2Output
err error
}
func (m mock) ListObjectsV2(*s3.ListObjectsV2Input) (*s3.ListObjectsV2Output, error) {
return m.output, m.err
}
在您的測驗中,您創建模擬并將其傳遞給您的函式:
func Test_ListObject(t *testing.T) {
l := &listContentImp{...}
m := mock{
output: &s3.ListObjectsV2Output{...},
err: nil
}
result, err := l.ListS3Content(m)
[... add checks here...]
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/444025.html
