LINUX.ORG.RU

История изменений

Исправление derlafff, (текущая версия) :

либо переписать все на интерфейсы

да

получается везде нужно пихать switch с преобразованиями

нет

Как например я могу протестировать вот такой обьект, замочив ssh.Client ?

Оче условно, лень компелять

//go:generate mockery --name SSHClient
type SSHClient interface {
    // все методы, что ты используешь
    // *ssh.Client автоматически к этому преобразуется где-нибудь снаружи около New
    Something() error
}

type Conn struct {
        SSHClient  SSHClient
}

func (conn *Conn) RunCommands(cmds ...string) (string, error) {
        _ = conn.SSHClient.Something()
        // ...
}

// ...

func TestSshClient(t *testing.T) {
        var mock = new(mocks.SSHClient)
        mock.On("Something").Return(nil).Once()
        var mockClient = Conn{SSHClient: mock}
        // ...
}

Как бонус - твой код перестает быть зависимым от конкретной реализации ssh-клиента.

Исправление derlafff, :

либо переписать все на интерфейсы

да

получается везде нужно пихать switch с преобразованиями

нет

Как например я могу протестировать вот такой обьект, замочив ssh.Client ?

Оче условно, лень компелять

//go:generate mockery --name sshClient
type sshClient interface {
    // все методы, что ты используешь
    // *ssh.Client автоматически к этому преобразуется где-нибудь снаружи около New
    Something() error
}

type Conn struct {
        SSHClient  SSHClient
}

func (conn *Conn) RunCommands(cmds ...string) (string, error) {
        _ = conn.SSHClient.Something()
        // ...
}

// ...

func TestSshClient(t *testing.T) {
        var mock = new(mocks.SSHClient)
        mock.On("Something").Return(nil).Once()
        var mockClient = Conn{SSHClient: mock}
        // ...
}

Как бонус - твой код перестает быть зависимым от конкретной реализации ssh-клиента.

Исправление derlafff, :

либо переписать все на интерфейсы

да

получается везде нужно пихать switch с преобразованиями

нет

Как например я могу протестировать вот такой обьект, замочив ssh.Client ?

Оче условно, лень компелять

//go:generate mockery --name sshClient
type sshClient interface {
    // все методы, что ты используешь
    // *ssh.Client автоматически к этому преобразуется где-нибудь снаружи около New
}

type Conn struct {
        SSHClient  SSHClient
}

func (conn *Conn) RunCommands(cmds ...string) (string, error) {
        _ = conn.SSHClient.Something()
        // ...
}

// ...

func TestSshClient(t *testing.T) {
        var mock = new(mocks.SSHClient)
        mock.On("Something").Return(nil).Once()
        var mockClient = Conn{SSHClient: mock}
        // ...
}

Как бонус - твой код перестает быть зависимым от конкретной реализации ssh-клиента.

Исправление derlafff, :

либо переписать все на интерфейсы

да

получается везде нужно пихать switch с преобразованиями

нет

Как например я могу протестировать вот такой обьект, замочив ssh.Client ?

//go:generate mockery --name sshClient
type sshClient interface {
    // все методы, что ты используешь
    // *ssh.Client автоматически к этому преобразуется где-нибудь снаружи около New
}

type Conn struct {
        SSHClient  SSHClient
}

func (conn *Conn) RunCommands(cmds ...string) (string, error) {
        _ = conn.SSHClient.Something()
        // ...
}

// ...
func TestSshClient(t *testing.T) {
        var mock = new(mocks.SSHClient)
        mock.On("Something").Return(nil).Once()
        var mockClient = Conn{SSHClient: mock}
}

Как бонус - твой код перестает быть зависимым от конкретной реализации ssh-клиента.

Исправление derlafff, :

либо переписать все на интерфейсы

да

получается везде нужно пихать switch с преобразованиями

нет

Как например я могу протестировать вот такой обьект, замочив ssh.Client ?

//go:generate mockery --name sshClient
type sshClient interface {
    // все методы, что ты используешь
    // *ssh.Client автоматически к этому преобразуется где-нибудь снаружи около New
}

type Conn struct {
        SSHClient  sshClient
}

func (conn *Conn) RunCommands(cmds ...string) (string, error) {
        _ = conn.sshClient.Something()
        // ...
}

Как бонус - твой код перестает быть зависимым от конкретной реализации ssh-клиента.

Исправление derlafff, :

либо переписать все на интерфейсы

да

получается везде нужно пихать switch с преобразованиями

нет

Как например я могу протестировать вот такой обьект, замочив ssh.Client ?

//go:generate mockery --name sshClient
type sshClient interface {
    // все методы, что ты используешь
    // *ssh.Client автоматически к этому преобразуется где-нибудь в New
}

type Conn struct {
        SSHClient  sshClient
}

func (conn *Conn) RunCommands(cmds ...string) (string, error) {
        _ = conn.sshClient.Something()
        // ...
}

Исходная версия derlafff, :

либо переписать все на интерфейсы

да

получается везде нужно пихать switch с преобразованиями

нет

Как например я могу протестировать вот такой обьект, замочив ssh.Client ?

//go:generate mockery --name sshClient
type sshClient {
    // все методы, что ты используешь
}

type Conn struct {
        SSHClient  sshClient
}

func (conn *Conn) RunCommands(cmds ...string) (string, error) {
        _ = conn.sshClient.Something()
        // ...
}