Size: a a a

2020 August 13

с

сонная википедия... in Go-go!
whoami
и еще - TestMain(m *testing.M) же вызывается один раз на один тест даже если они в одном пакадже?
TestMain вызывается один раз на пакет, вы не сможете определить его дважды
источник

RS

Roman Sharkov in Go-go!
whoami
Коллеги, подскажите


хочу в каждом тесте где есть взаимодействие с бд устанавливать подключение к тестовой бд
Знаю что можно через TestMain(m *testing.M) можно выполнить setup и teardown
но как избежать дублирования кода?
я обычно так делаю:

func TestFoo(t *testing.T) {
 s := setup(t)
 s.db //…
}

func TestBar(t *testing.T) {
 s := setup(t)
 s.db //…
}

func setup(t *testing.T) (s Setup) {
 s.db = openDBConn()
 t.Cleanup(func() {
   s.db.Close()
 })
}
источник

RS

Roman Sharkov in Go-go!
и бд обычно создают в каждом из тестов для полной изоляции
источник

w

whoami in Go-go!
сонная википедия
TestMain вызывается один раз на пакет, вы не сможете определить его дважды
так и думал, спасибо
источник

w

whoami in Go-go!
Roman Sharkov
я обычно так делаю:

func TestFoo(t *testing.T) {
 s := setup(t)
 s.db //…
}

func TestBar(t *testing.T) {
 s := setup(t)
 s.db //…
}

func setup(t *testing.T) (s Setup) {
 s.db = openDBConn()
 t.Cleanup(func() {
   s.db.Close()
 })
}
спасибо!
источник

с

сонная википедия... in Go-go!
Roman Sharkov
я обычно так делаю:

func TestFoo(t *testing.T) {
 s := setup(t)
 s.db //…
}

func TestBar(t *testing.T) {
 s := setup(t)
 s.db //…
}

func setup(t *testing.T) (s Setup) {
 s.db = openDBConn()
 t.Cleanup(func() {
   s.db.Close()
 })
}
еще неплохо бы t.Helper() добавить

https://golang.org/pkg/testing/#T.Helper
источник

RS

Roman Sharkov in Go-go!
сонная википедия
еще неплохо бы t.Helper() добавить

https://golang.org/pkg/testing/#T.Helper
вот кстати я лично им никогда не пользовался, хоть и знаю про его существование, надо попробовать
источник

с

сонная википедия... in Go-go!
Roman Sharkov
вот кстати я лично им никогда не пользовался, хоть и знаю про его существование, надо попробовать
ну он чисто декоративный
источник

RS

Roman Sharkov in Go-go!
сонная википедия
еще неплохо бы t.Helper() добавить

https://golang.org/pkg/testing/#T.Helper
а что если в setup тоже есть некоторые проверки вовлекающие t?
источник

с

сонная википедия... in Go-go!
Roman Sharkov
а что если в setup тоже есть некоторые проверки вовлекающие t?
ну вся идея в том чтоб правильно печатать путь к файлу с тестом
источник

RS

Roman Sharkov in Go-go!
сонная википедия
ну вся идея в том чтоб правильно печатать путь к файлу с тестом
у меня setup обычно в том же файле что и сами тесты
источник

с

сонная википедия... in Go-go!
и строчку
источник

RS

Roman Sharkov in Go-go!
а ну если обломится внутри setup? покажет где именно?
источник

с

сонная википедия... in Go-go!
Roman Sharkov
а ну если обломится внутри setup? покажет где именно?
если через t.Log(а значит t.Fatal тоже), то вряд ли
источник

с

сонная википедия... in Go-go!
но я не уверен
источник

с

сонная википедия... in Go-go!
в любом случае, если setup не должен ничего тестировать, как мне кажется
источник

RS

Roman Sharkov in Go-go!
ибо в setup у меня обычно всякие require.NoError(t, err)
источник

RS

Roman Sharkov in Go-go!
сонная википедия
в любом случае, если setup не должен ничего тестировать, как мне кажется
то же подключение к бд
источник

с

сонная википедия... in Go-go!
приготовительные ошибки(не удалось например подключиться к базе), в принципе могут и на имя теста печататься, какая разница
источник

RS

Roman Sharkov in Go-go!
ну главное чтоб он строку не прятал
источник