Как я могу выполнить общую обработку настройки теста, которая создает основу для всех тестов при использовании пакета тестирования ?
В качестве примера в Nunit есть [SetUp]
атрибут.
[TestFixture]
public class SuccessTests
{
[SetUp] public void Init()
{ /* Load test data */ }
}
unit-testing
go
Miltonb
источник
источник
Ответы:
Начиная с Go 1.4, вы можете реализовать настройку / разборку (нет необходимости копировать свои функции до / после каждого теста). Документация изложена здесь в главном разделе:
Мне потребовалось некоторое время, чтобы понять, что это означает, что если тест содержит функцию,
func TestMain(m *testing.M)
то эта функция будет вызываться вместо запуска теста. И в этой функции я могу определить, как будут выполняться тесты. Например, я могу реализовать глобальную настройку и демонтаж:Здесь можно найти еще пару примеров .
источник
TestMain
один раз в пакете, поэтому он не так полезен. Я считаю, что субтесты лучше подходят для более сложных целей.lstat $GOROOT/subtests: no such file or directory
Этого можно добиться, поместив
init()
функцию в_test.go
файл. Это будет запущено передinit()
функцией._Test.init () будет вызываться перед функцией пакета init ().
источник
[TestFixtureSetUp]
вместо этого атрибута NUnit .Учитывая простую функцию для модульного тестирования:
Вы можете проверить это с помощью функции настройки, которая возвращает функцию разрыва. А после вызова setup () вы можете сделать отложенный вызов teardown ().
Инструмент тестирования Go сообщит операторы регистрации в консоли оболочки:
При таком подходе вы можете передать некоторые дополнительные параметры для настройки / разборки.
источник
Обычно тесты в go не написаны в том же стиле, что и другие языки. Часто тестовых функций относительно меньше, но каждая содержит набор тестовых примеров на основе таблиц. См. Эту статью, написанную одним из разработчиков Go.
В тесте, управляемом таблицей, вы просто помещаете любой установочный код перед циклом, который выполняет отдельные тестовые случаи, указанные в таблице, а затем помещаете любой код очистки.
Если у вас все еще есть общий код настройки для тестовых функций, вы можете извлечь общий код настройки в функцию и использовать,
sync.Once
если важно, чтобы он выполнялся ровно один раз (или, как предлагает другой ответ, используйтеinit()
, но это имеет тот недостаток, что настройка будет выполняться, даже если тестовые примеры не запускаются (возможно, потому, что вы ограничили тестовые примеры с помощьюgo test -run <regexp>
.)Я бы сказал, если вы считаете, что вам нужна общая настройка для разных тестов, которая запускается ровно после того, как вы должны подумать, действительно ли вам это нужно, и если бы тест, управляемый таблицами, не был бы лучше.
источник
Платформа тестирования Go не имеет ничего эквивалентного атрибуту SetUp NUnit (помечающему функцию, которая должна быть вызвана перед каждым тестом в наборе). Однако есть несколько вариантов:
Просто вызовите свою
SetUp
функцию из каждого теста, где это необходимо.Используйте расширение для инфраструктуры тестирования Go, которое реализует парадигмы и концепции xUnit. На ум приходят три сильных варианта:
Каждая из этих библиотек побуждает вас организовывать ваши тесты в наборы / приспособления, аналогичные другим фреймворкам xUnit, и будет вызывать методы настройки для типа набора / приспособления перед каждым из
Test*
методов.источник
Бесстыдный плагин, я создал https://github.com/houqp/gtest, чтобы помочь решить именно эту проблему.
Вот краткий пример:
Вы можете создать любую тестовую группу в пакете, где каждая из них будет использовать свой набор процедур установки / удаления.
источник