Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
bcho opened this issue Sep 26, 2023 · 4 comments · May be fixed by #98
Closed

Comments

@bcho
Copy link
Contributor

bcho commented Sep 26, 2023

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

  • gomock mode (reflect or source): reflect
  • gomock version or git ref: v0.3.0
  • golang version: go1.21.0

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
Copy link
Contributor Author

bcho commented Sep 26, 2023

I have a potential fix here: #98, but needs more time to investigate and understand the root cause.

@bcho
Copy link
Contributor Author

bcho commented Sep 26, 2023

I think it's kind of related to this: golang/go#54393

@tra4less
Copy link
Contributor

@bcho Your mockgen is not the latest version. Please run go install go.uber.org/mock/mockgen@main before executing go generate.

@bcho
Copy link
Contributor Author

bcho commented Oct 12, 2024

@bcho Your mockgen is not the latest version. Please run go install go.uber.org/mock/mockgen@main before executing go generate.

Hi, I think the problem is reflect mode does not support generating generic type. The issue is reporting the reflect mode usage. I understand the latest main branch has deprecated the reflect mode. Your suggestion is for switching to a different mode, which will require some additional update on the command due to legacy usages.

Will close this issue since there is no way to implement this feature under reflect mode.

@bcho bcho closed this as completed Oct 12, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants