Junior — Middle
Роли асосии объектҳои Mock дар раванди санҷиш чист?
sobes.tech AI
Ҷавоб аз AI
Объектҳои mock истифода мешаванд дар санҷишҳо барои имитация кардани рафтори компонентҳои воқеии системае, ки бо онҳо модул дар ҳоли санҷиш қарор дорад, муошират мекунанд. Нақши асосии mock — ҷудо кардани коди санҷишшаванда аз вобастагиҳои беруна (масалан, базаҳои додаҳо, хизматрасониҳои шабакавӣ) мебошад, то ки санҷишҳо тез, боэътимод ва такроршаванда бошанд.
Истифодаи объектҳои mock имкон медиҳад:
- назорати муошират бо вобастагиҳо (масалан, зангҳои методҳо, параметрҳои додашуда)
- симулятсияи сценарияҳои гуногуни коркардии вобастагиҳо (муваффақият, хатоҳо, таъхирҳо)
- содда кардани танзими муҳити санҷиш.
Масалан дар Go бо истифода аз интерфейсҳо ва mock барои санҷиши функсияе, ки ба хизматрасонии хориҷӣ занг мезанад:
package service
type ExternalAPI interface {
GetData(id string) (string, error)
}
func ProcessData(api ExternalAPI, id string) (string, error) {
data, err := api.GetData(id)
if err != nil {
return "", err
}
return "Processed: " + data, nil
}
// Дар санҷиш mock-ро месозем:
type MockAPI struct {}
func (m *MockAPI) GetData(id string) (string, error) {
if id == "123" {
return "mocked data", nil
}
return "", fmt.Errorf("not found")
}
// Санҷиш
func TestProcessData(t *testing.T) {
mock := &MockAPI{}
result, err := ProcessData(mock, "123")
if err != nil || result != "Processed: mocked data" {
t.Errorf("нобеҳ натиҷа: %v, хато: %v", result, err)
}
}