golang / mock

GoMock is a mocking framework for the Go programming language.
Apache License 2.0
9.26k stars 608 forks source link

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

Closed daolis closed 1 year ago

daolis commented 1 year ago

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 https://github.com/golang/go/issues/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
}
tra4less commented 1 year ago

669 fix it

daolis commented 1 year ago

Closing issue: see #669