Testify Макет возврата функции внутри функции - PullRequest
0 голосов
/ 07 июня 2018

Я хотел бы посмеяться над ответом функции.Но эта функция находится или вызывается внутри другой функции.Допустим, у меня есть эта функция

// main.go
func TheFunction() int {
   // Some code
   val := ToMockResponse()
   return val
}

func ToMockResponse() int {
    return 123
}

Теперь в моем тестовом файле

// main_test.go
func TestTheFunction(t *testing.T) {
    mockInstance = new(randomMock)
    mockInstance.On("ToMockResponse").Return(456)

    returned := TheFunction()
    assert.Equal(t, 456, returned)
}

Как вы можете видеть в функции TheFunction () вызов функции ToMockResponse сделано.Теперь я хотел бы протестировать TheFunction , но я хотел бы высказать ответ ToMockResponse как мне этого добиться?

1 Ответ

0 голосов
/ 07 июня 2018

Вы должны рассмотреть возможность передачи второй функции в качестве параметра первой.

У вас есть несколько вариантов сделать это.Вы можете просто передать его в качестве параметра.

func DoX(doY func()) {
   doY()
}

Это просто, но не работает, так как ядро ​​становится более сложным.Лучшей альтернативой часто является создание методов функций в структуре.

type X struct {
   Y Y
}

type Y interface {
   Do()
}

func (x *X) Do() {
   x.Y.Do()
}

Тогда Y можно заменить на макет.

...