func NewController(t TestReporter) *Controller {
	h, ok := t.(TestHelper)
	if !ok {
		h = nopTestHelper{t}
	}
	return &Controller{
		T:             h,
		expectedCalls: newCallSet(),
	}
}
NewController returns a new Controller. It is the preferred way to create a
Controller.
package gomock
import (
	"context"
	"fmt"
	"reflect"
	"runtime"
	"sync"
)
type TestReporter interface {
	Errorf(format string, args ...interface{})
	Fatalf(format string, args ...interface{})
}
type TestHelper interface {
	TestReporter
	Helper()
}
type Controller struct {
	T             TestHelper
	mu            sync.Mutex
	expectedCalls *callSet
	finished      bool
}