Sobes.tech
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)
    }
}