Использование testing.T в TestMain - PullRequest
0 голосов
/ 03 ноября 2018

Я хочу выполнить несколько тестовых случаев, для которых необходимо запустить фиктивный сервер GRPC. Я использую gomock библиотеку для этого. Чтобы запустить сервер, я должен передать этой функции переменную типа testing.T - gomock.NewController(). Так как это своего рода инициализация для всех тестовых случаев, я хочу сделать это в TestMain. Но TestMain имеет доступ только к testing.M Так как мне справиться с этим делом? Создать новую testing.T структуру в TestMain? Будет ли это работать?

1 Ответ

0 голосов
/ 03 декабря 2018

Звучит так, будто вы ищете шаблон BeforeEach. У вас нет доступа к testing.T объекту в TestMain, потому что это более подходящее место для инициализации до и после запуска набора тестов.

Есть несколько фреймворков, которые могут дать вам BeforeEach дешево:

чтобы назвать несколько.

Вы также можете сделать свой собственный бросок:

type test struct{
  ctrl *gomock.Controller
  mockFoo *MockFoo
  // ...
}

func beforeEach(t *testing.T) test {
  ctrl := gomock.NewController(t)
  return test {
    ctrl:ctrl,
    mockFoo: NewMockFoo(ctrl),
  }
}

func TestBar(t *testing.T) {
  test := beforeEach(t)
  // ...
}

func TestBaz(t *testing.T) {
  test := beforeEach(t)
  // ...
}
...