Как получить несколько значений, возвращаемых методом в методе testify «assert» в качестве аргумента? - PullRequest
1 голос
/ 10 октября 2019

Ниже приведен пример кода, который возвращает несколько значений.

func (c Calc) CreateTenantHandler(item *models.TenantInput) (*models.Response, *models.ErrorDetails) {

        ...
        ...
        ...

        return &models.Response{ResponseStatus: 201, TenantOutput: tenantoutput,}, nil

    }

В тестовом файле я попытался выполнить следующие действия.

assert.Equal(t,[nil,nil],testObject.CreateTenantHandler(nil) );

Я также проверил другие ответы, ноне могу найти то, что мне нужно.

Ответы [ 4 ]

2 голосов
/ 10 октября 2019

Ты не. Это не имеет ничего общего с дачей показаний - так работает Го. Установите несколько переменных для возвращаемых значений, а затем утвердите каждую из них по отдельности:

x, y := testObject.CreateTenantHandler(nil)
assertEqual(t, x, expectedX)
assertEqual(t, y, expectedY)
1 голос
/ 12 ноября 2019

Проблема заключается в том, что вы хотите преобразовать несколько возвращаемых значений в одно значение, которое может использоваться assert.Equal.

Это можно сделать, передав несколько значений в функцию с переменным числом, которая преобразует все значения (независимо от их количества) в один фрагмент интерфейсов. Этот фрагмент затем обрабатывается как одно значение и работает довольно хорошо с testify assert.Equal.

Функция shim, упомянутая в другом месте, близка, но имеет фиксированное количество параметров. makeIS () ниже меньше кода, чище, проще и работает с любым количеством возвращаемых значений / параметров. Поместите эту функцию в ваш тестовый пакет.

    // makeIS will convert any number of parameters to a []interface{}
    func makeIS(v ...interface{}) []interface{} {
        return v
    }

Теперь утверждение работает следующим образом

    assert.Equal(t, makeIS(eX,eY), makeIS(iReturnTwoValues())

Свидетельство знает, как сделать сравнение, и очень хорошо сообщает о различиях в отдельных параметрах. Обратите внимание, что это дает дополнительное преимущество «выглядеть как» вызов, который вы хотите проверить, с двумя целевыми значениями слева от функции.

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

Один простой способ сделать то, что вам нужно, - объявить функцию, такую ​​как shim:

  func shim(a, b interface{}) []interface{} {
      return []interface{}{a, b}
  }

, а затем:

  assert.Equal(t, shim(5,6), shim(testObject.CreateTenantHandler(nil)));

Поведение подробно описано вссылка ниже:

источник: http://zacg.github.io/blog/2014/10/05/go-asserts-and-multiple-return-values/

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

Вы можете добавить функцию преобразования, чтобы исправить это

package multi_return

import (
    "github.com/stretchr/testify/assert"
    "testing"
)

func multiReturn() (int, float32) {
    return 1, 2
}

func toSlice(a ...interface{}) []interface{} {
    return a
}

func TestMultiReturn(t *testing.T) {
    assert.Equal(t, []interface{}{int(1), float32(2)}, toSlice(multiReturn()))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...