stretchr / testify / assert просто дает трассировку стека, пропуская фактическое сообщение об ошибке - PullRequest
0 голосов
/ 23 октября 2018

У меня есть следующий тест, который я хотел бы преобразовать для использования github.com/stretchr/testify/assert import, что было бы лучше для этого сделать?Код, как сейчас:

func TestSdk(t *testing.T) {
    ctx := context.Background()

    sdk, err := NewSdk(ctx)
    if err != nil {
        t.Errorf("Unable to get VMware SDK: %v", err)
    }

    defer sdk.GovClient.Logout(ctx)
}

Ошибка: FAIL |--- FAIL: TestSdk (0.00s) |sdk_test.go: 48: Невозможно получить VMware SDK: установите переменные среды: HCI_ENDPOINT, HCI_USERNAME и HCI_PASSWORD |паника: ошибка во время выполнения: неверный адрес памяти или разыменование нулевого указателя [восстановлено] |паника: ошибка во время выполнения: неверный адрес памяти или разыменование нулевого указателя |[сигнал SIGSEGV: код нарушения сегментации = 0x1 addr = 0x0 pc = 0x151cc31] |Горутин 6 [работает]: |testing.tRunner.func1 (0xc00019a100) |/usr/local/Cellar/go/1.11.1/libexec/src/testing/testing.go:792 + 0x387 |паника (0x1642c20, 0x1f46a80) |/usr/local/Cellar/go/1.11.1/libexec/src/runtime/panic.go:513 + 0x1b9 |github.com/kubicorn/kubicorn/cloud/vmware/vmwareSdkGo.TestSdk(0xc00019a100) |/Users/jonma/go/src/github.com/kubicorn/kubicorn/cloud/vmware/vmwareSdkGo/sdk_test.go:51 + 0x121 |testing.tRunner (0xc00019a100, 0x1825b48) |/usr/local/Cellar/go/1.11.1/libexec/src/testing/testing.go:827 + 0xbf |создан тестированием. (* T) .Run |/usr/local/Cellar/go/1.11.1/libexec/src/testing/testing.go:878 + 0x353 FAIL |github.com/kubicorn/kubicorn/cloud/vmware/vmwareSdkGo 0.019s

Это то, к чему я изменил, проблема с этим подходом заключается в том, что сообщение об ошибке не отображается, только какая-то длинная трассировка стека

func TestSdk(t *testing.T) {
    ctx := context.Background()

    sdk, err := NewSdk(ctx)

    assert.Errorf("Unable to get VMware SDK: %v", err)

    defer sdk.GovClient.Logout(ctx)
}

FAIL |--- FAIL: TestSdk (0.00s) |паника: ошибка во время выполнения: неверный адрес памяти или разыменование нулевого указателя [восстановлено] |паника: ошибка во время выполнения: неверный адрес памяти или разыменование нулевого указателя |[сигнал SIGSEGV: код нарушения сегментации = 0x1 addr = 0x0 pc = 0x151eecf] |Горутин 6 [работает]: |testing.tRunner.func1 (0xc00019e100) |/usr/local/Cellar/go/1.11.1/libexec/src/testing/testing.go:792 + 0x387 |паника (0x1645200, 0x1f4aab0) |/usr/local/Cellar/go/1.11.1/libexec/src/runtime/panic.go:513 + 0x1b9 |github.com/kubicorn/kubicorn/cloud/vmware/vmwareSdkGo.TestSdk(0xc00019e100) |/Users/jonma/go/src/github.com/kubicorn/kubicorn/cloud/vmware/vmwareSdkGo/sdk_test.go:57 + 0x1ef |testing.tRunner (0xc00019e100, 0x1828420) |/usr/local/Cellar/go/1.11.1/libexec/src/testing/testing.go:827 + 0xbf |создан тестированием. (* T) .Run |/usr/local/Cellar/go/1.11.1/libexec/src/testing/testing.go:878 + 0x353 FAIL |github.com/kubicorn/kubicorn/cloud/vmware/vmwareSdkGo 0.034s

Здесь я пропускаю фактическое сообщение об ошибке из вызванной функции.

1 Ответ

0 голосов
/ 23 октября 2018

Вместо defer sdk.GovClient.Logout(ctx) попробуйте defer func() { if (ctx!=nil) { sdk.GovClient.Logout(ctx) }

Вторая паника из-за этого отсрочки на неверном ctx

(у меня здесь нет vmwareSDK,прежде чем пытаться его проверить, нужно убедиться, что sdk.GovClient.Logout имеет допустимый параметр)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...