Sobes.tech
Junior — Middle

Кадом восита ва забони барномасозӣ барои сохтани тестҳои Mock истифода шудаанд?

sobes.tech AI

Ҷавоб аз AI

Барои эҷоди тестҳои Mock, одатан китобхонаҳо ва асбҳои махсус истифода мешаванд, ки имкон медиҳанд рафтори вобастагиҳо ва хидматҳои берунаро имитатсия кунанд. Дар асоси забони барномасозӣ, вариантҳои маъмул инҳоянд:

  • JavaScript/TypeScript: Jest, Sinon.js — имкон медиҳанд, ки mock, stub ва spy созанд.
  • Java: Mockito, EasyMock — барои сохтани объектҳои mock васеъ истифода мешаванд.
  • Python: unittest.mock, pytest-mock — китобхонаҳои дарунсохт ва хориҷӣ барои mocking.
  • Go: gomock, testify/mock — асбҳо барои тавлид ва истифодаи mock.

Масалан дар Go бо истифода аз testify/mock:

import (
    "testing"
    "github.com/stretchr/testify/mock"
)

// Интерфейс, ки мо имитатсия мекунем
type UserRepository interface {
    GetUser(id int) (*User, error)
}

// Сохтори mock
type MockUserRepository struct {
    mock.Mock
}

func (m *MockUserRepository) GetUser(id int) (*User, error) {
    args := m.Called(id)
    return args.Get(0).(*User), args.Error(1)
}

func TestGetUser(t *testing.T) {
    mockRepo := new(MockUserRepository)
    mockUser := &User{ID: 1, Name: "John"}

    mockRepo.On("GetUser", 1).Return(mockUser, nil)

    user, err := mockRepo.GetUser(1)
    if err != nil || user.Name != "John" {
        t.Fail()
    }

    mockRepo.AssertExpectations(t)
}

Инчунин, интихоби асбҳо вобаста ба забон ва талаботи лоиҳа мебошад.