Skip to main content

Testing

Panduan lengkap testing dari unit test sampai integration test.

๐Ÿงช Testing Pyramid

๐Ÿ“ Unit Test Example

func TestUserService_CreateUser(t *testing.T) {
    // Arrange
    mockRepo := new(MockUserRepository)
    service := NewUserService(mockRepo)
    
    user := &User{
        Email: "[email protected]",
        Name:  "Test User",
    }
    
    mockRepo.On("Save", mock.Anything, user).Return(nil)
    
    // Act
    err := service.CreateUser(context.Background(), user)
    
    // Assert
    assert.NoError(t, err)
    mockRepo.AssertExpectations(t)
}

๐Ÿ”— Integration Test

func TestOrderAPI_CreateOrder_Integration(t *testing.T) {
    // Setup test database
    db := setupTestDB(t)
    defer db.Close()
    
    // Create test data
    user := createTestUser(t, db)
    product := createTestProduct(t, db)
    
    // Make API request
    req := CreateOrderRequest{
        Items: []OrderItem{
            {ProductID: product.ID, Quantity: 2},
        },
    }
    
    resp := makeRequest(t, "POST", "/orders", req, user.Token)
    
    // Assert
    assert.Equal(t, 201, resp.StatusCode)
    
    // Verify database
    order := getOrderFromDB(t, db, resp.Data.ID)
    assert.Equal(t, "pending", order.Status)
}

๐Ÿš€ Running Tests

# Run all tests
go test ./...

# Run with coverage
go test ./... -cover

# Run specific package
go test ./internal/auth/...

# Run with race detector
go test ./... -race

# Generate coverage report
go test ./... -coverprofile=coverage.out
go tool cover -html=coverage.out