Go 在TestMain中使用testing.T

Go 在TestMain中使用testing.T,go,grpc,gomock,Go,Grpc,Gomock,我想运行几个测试用例,需要启动GRPC模拟服务器。我正在为此使用gomock库。要启动服务器,我必须将类型为testing.T的变量传递给此函数-。因为这是对所有测试用例的一种初始化,所以我想在TestMain中进行初始化。但是TestMain只能访问testing.M,那么我该如何处理这种情况呢?在TestMain中创建新的testing.T结构?这行得通吗?听起来你好像在每个模式之前寻找一个。您无权访问TestMain中的testing.t对象,因为这更像是在测试套件运行前后进行初始化的地方

我想运行几个测试用例,需要启动GRPC模拟服务器。我正在为此使用
gomock
库。要启动服务器,我必须将类型为
testing.T
的变量传递给此函数-。因为这是对所有测试用例的一种初始化,所以我想在
TestMain
中进行初始化。但是
TestMain
只能访问
testing.M
,那么我该如何处理这种情况呢?在
TestMain
中创建新的
testing.T
结构?这行得通吗?

听起来你好像在每个模式之前寻找一个
。您无权访问
TestMain
中的
testing.t
对象,因为这更像是在测试套件运行前后进行初始化的地方

有一些框架可以在每次使用之前为您提供廉价的

举几个例子

您也可以自己动手滚动:

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)
  // ...
}

由于TestReporter只是一个接口,您可以尝试创建自己的接口:无法创建testing.t实例,因为所有字段都没有导出。忘记TestMain,在每个测试中分别启动服务器。这是一般的最佳实践。请提供一些主要函数的代码示例。我肯定你里面有太多东西了。对主函数进行一点重构之后,测试就会容易得多。