uber-go / mock

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

Unable to generate mock for package using alternate major version and generic type with reflect mode #97

Open bcho opened 9 months ago

bcho commented 9 months ago

Actual behavior

mockgen generates a uncompilable mock file for interface using alternate major version package and generic types.

Here is a reproduce:

package mockgenrepro

import (
    "context"
    "fmt"

    "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime"
    armcontainerservice "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerservice/armcontainerservice/v4" // a package using alternate major version
)

//go:generate mockgen -destination mock_main/foo.go -package mock_main . Interface

type Interface interface {
    BeginAbortLatestOperation(ctx context.Context, resourceGroupName string, resourceName string, agentPoolName string, options *armcontainerservice.AgentPoolsClientBeginAbortLatestOperationOptions) (*runtime.Poller[armcontainerservice.AgentPoolsClientAbortLatestOperationResponse], error)
}

Above program fails the mockgen with error like this (full output):

2023/09/26 16:19:41 Failed to format generated source code: mock_main/foo.go:41:201: missing ',' in type argument list (and 1 more errors)

You can find the full repro here: https://github.com/bahe-msft/mockgen-repro

Expected behavior

Generated mock file should be a valid go source. Expected output: https://github.com/bahe-msft/mockgen-repro/blob/main/mock_main/foo.go

To Reproduce Steps to reproduce the behavior

  1. clone https://github.com/bahe-msft/mockgen-repro
  2. run go generate -v ...

Additional Information

The same mock can be generated using source mode. But our project is using reflect mode heavily, so we want to fix in reflect mode as well.

Triage Notes for the Maintainers

bcho commented 9 months ago

I have a potential fix here: https://github.com/uber-go/mock/pull/98, but needs more time to investigate and understand the root cause.

bcho commented 9 months ago

I think it's kind of related to this: https://github.com/golang/go/issues/54393