package cmd import ( "testing" "github.com/spf13/cobra" "github.com/stretchr/testify/assert" ) // Вспомогательная структура для перехвата вызовов osExit type exitCapture struct { code int called bool } func (e *exitCapture) capture(code int) { e.code = code e.called = true } func TestExecute_Success(t *testing.T) { // Сохраняем оригинальный osExit originalExit := osExit defer func() { osExit = originalExit }() // Настраиваем перехват capture := &exitCapture{} osExit = capture.capture // Запускаем выполнение Execute() // Проверяем, что выход не вызывался if capture.called { t.Errorf("osExit called with code %d, expected no call", capture.code) } } func TestExecute_Error(t *testing.T) { originalExit := osExit defer func() { osExit = originalExit }() capture := &exitCapture{} osExit = capture.capture // Подменяем rootCmd на команду, возвращающую ошибку originalCmd := rootCmd defer func() { rootCmd = originalCmd }() rootCmd = &cobra.Command{ Use: "error-cmd", RunE: func(cmd *cobra.Command, args []string) error { return assert.AnError // Имитация ошибки }, } // Вызываем Execute Execute() // Проверяем, что osExit вызван с кодом 1 if !capture.called { t.Fatal("osExit not called") } if capture.code != 1 { t.Errorf("expected exit code 1, got %d", capture.code) } }