Я не могу придумать лучшего заголовка.
В следующем коде, если rollBackLogger
- это nil
, первый тестовый пример завершится ошибкой, но все остальные тестовые примеры вызовут исключение.
Есть ли способ избежать этого, кроме использования оператора if
?
Я считаю, что это очень распространенная ситуация для модульного тестирования и что в assert
должна быть какая-то функция или какой-то другой способ избежать этого.
assert.NotNil(rollbackLogger)
assert.Equal("Action", rollBackLogger[0].Action)
assert.Equal("random path", rollBackLogger[0].FilePath)
Вы можете просто использовать t.FailNow()
, если хотите, чтобы тест не прошел, если условие не является допустимым.
Я не думаю, что есть способ остановить тест при сбое утверждения без использования условия или внешнего пакета.
if !assert.NotNil(rollbackLogger) {
t.FailNow()
}
assert.Equal("Action", rollBackLogger[0].Action)
assert.Equal("random path", rollBackLogger[0].FilePath)
или если вы используете пакет testify/assert
,
if !assert.NotNil(rollbackLogger) {
assert.FailNow(t, "message")
}
assert.Equal("Action", rollBackLogger[0].Action)
assert.Equal("random path", rollBackLogger[0].FilePath)
Вместо этого используйте require.NotNil.
Package require implements the same assertions as the
assert
package but stops test execution when a test fails.
require.NoError также особенно полезен.
Вы также можете использовать
assert.FailNow(t)
, чтобы сделать то же самое, но я не вижу, чтобы это было каким-либо обновлением по сравнению сt.FailNow()
, за исключением того, что он придерживался одного источника «утверждения» в тесте.