Как вы высмеиваете возвращаемое значение ошибки в издевательстве для GoLang? - PullRequest
0 голосов
/ 24 октября 2019

Я использую https://github.com/vektra/mockery для создания моих макетов файлов.

Предположим, у меня есть этот тест для функции GetQualifyingListOfBooks. Подпись для (смоделированного) клиентского метода GetListOfBooks:

func GetListOfBooks(ctx context.Context, in *GetListOfBooksRequest, opts ...grpc.CallOption) (*GetListOfBooksResponse, error)

Цель : я хочу смоделировать ситуацию, когда GetListOfBooks возвращает ошибкуИтак, я написал следующее:

package whatever

import (
    "context"
    "testing"
    "github.com/stretchr/testify/assert"
    mock "github.com/stretchr/testify/mock"
    mockClients "github.com/MyOrg/MyApp/internal/app/myservice/mocks"
)

func TestGetQualifyingListOfBooks (t *testing.T) {
    client := &mockClients.BookClient{}
    client.On("GetListOfBooks", mock.Anything, mock.Anything).Return(nil, mock.AnythingOfType("error"))
    realInstance.bookClient = client
    b, err := GetQualifyingListOfBooks(realInstance, 10) // this calls `GetListOfBooks`
    assert.Nil(t, b)
    assert.NotNil(t, err)
}

но он паникует с этим:

--- FAIL: TestGetQualifyingListOfBooks (0.00s)
panic: assert: arguments: Error(1) failed because object wasn't correct type: Error(1) [recovered]
    panic: assert: arguments: Error(1) failed because object wasn't correct type: Error(1)

Как вы высмеиваете возвращаемое значение ошибки?

1 Ответ

0 голосов
/ 24 октября 2019

Изменение этой строки

client.On("GetListOfBooks", mock.Anything, mock.Anything).Return(nil, mock.AnythingOfType("error"))

на эту

client.On("GetListOfBooks", mock.Anything, mock.Anything).Return(nil, errors.New("hello world"))

сделало это для меня.

...