golang/mock

Generating mocks (reflect mode) fails if interface contains methods with generic types

daolis opened this issue · 2 comments

Generating mocks (reflect mode) fails with Failed to format generated source code: if the interface contains methods with generic types.

The generated code contains the full package path as the type.
The wrong type is returned from reflect.typeOf (see golang/go#55147)

Reproduceable with

package test

import (
	_ "github.com/golang/mock/gomock"
)

type TestType string

type TestGenericType[T any] struct {
	blaa T
}

//go:generate mockgen -destination zz_generated_mock.go -package mockst . TestGenericInterface

type TestGenericInterface interface {
	TestMethod() TestGenericType[TestType]
}

generated file contains e.g. this method

// TestMethod mocks base method.
func (m *MockTestGenericInterface) TestMethod() test.TestGenericType[github.com/daolis/mockgentest/test.TestType] {
        m.ctrl.T.Helper()
        ret := m.ctrl.Call(m, "TestMethod")
        ret0, _ := ret[0].(test.TestGenericType[github.com/daolis/mockgentest/test.TestType])
        return ret0
}

#669 fix it

daolis commented

Closing issue: see #669