常见的 Bazel gomock 规则

发布于 2025-01-17 03:59:52 字数 2653 浏览 3 评论 0原文

有没有一种方法可以在一个库中声明 gomock 规则并在另一个库中引用它? gomock 说明适用于同一包中声明的接口。例如:

backend/service/db/BUILD.bazel:

# Contains StargateQueryExecutor interface
go_library(
    name = "db",
    srcs = ["db.go"],
    importpath = "backend/service/db",
    visibility = ["//visibility:public"],
    deps = [
        "@com_github_huandu_go_sqlbuilder//:go-sqlbuilder",
        "@com_github_stargate_stargate_grpc_go_client//stargate/pkg/proto",
    ],
)

gomock(
    name = "mock_db",
    out = "mock_db_test.go",
    interfaces = ["StargateQueryExecutor"],
    library = ":db",
    package = "db",
)

go_test(
    name = "db_test",
    srcs = [
        "db_test.go",
        "mock_db_test.go",
    ],
    embed = [":db"],
    deps = [
        "@com_github_golang_mock//gomock",
        "@com_github_google_go_cmp//cmp:go_default_library",
        "@com_github_stargate_stargate_grpc_go_client//stargate/pkg/proto",
        "@org_golang_google_protobuf//testing/protocmp:go_default_library",
    ],
)

我想做的是依赖于这个和其他构建文件中的 :mock_db 。我希望它看起来像:

backend/common/db/BUILD.bazel:

# Contains StargateQueryExecutor interface
go_library(
    name = "db",
    srcs = ["interfaces.go"],
    importpath = "backend/common/db",
    visibility = ["//visibility:public"],
    deps = [
        "@com_github_stargate_stargate_grpc_go_client//stargate/pkg/proto",
    ],
)
gomock(
    name = "mock_db",
    out = "mock_db_test.go",
    interfaces = ["StargateQueryExecutor"],
    library = ":db",
    package = "db",
)

backend/service/db/BUILD.bazel:

go_library(
    name = "db",
    srcs = ["db.go"],
    importpath = "backend/service/db",
    visibility = ["//visibility:public"],
    deps = [
        "//backend/common/db",
        "@com_github_huandu_go_sqlbuilder//:go-sqlbuilder",
        "@com_github_stargate_stargate_grpc_go_client//stargate/pkg/proto",
    ],
)
go_test(
    name = "db_test",
    srcs = [
        "db_test.go",
        "mock_db_test.go",
    ],
    embed = [":db"],
    deps = [
        "//backend/common/db:mock_db", # <--- THIS
        "@com_github_golang_mock//gomock",
        "@com_github_google_go_cmp//cmp:go_default_library",
        "@com_github_stargate_stargate_grpc_go_client//stargate/pkg/proto",
        "@org_golang_google_protobuf//testing/protocmp:go_default_library",
    ],
)

当我尝试这个时,它找不到 mock_db_test.go源文件。

Is there a way to declare a gomock rule in one library and reference it in another? The instructions for gomock work for interfaces declared in the same package. For example:

backend/service/db/BUILD.bazel:

# Contains StargateQueryExecutor interface
go_library(
    name = "db",
    srcs = ["db.go"],
    importpath = "backend/service/db",
    visibility = ["//visibility:public"],
    deps = [
        "@com_github_huandu_go_sqlbuilder//:go-sqlbuilder",
        "@com_github_stargate_stargate_grpc_go_client//stargate/pkg/proto",
    ],
)

gomock(
    name = "mock_db",
    out = "mock_db_test.go",
    interfaces = ["StargateQueryExecutor"],
    library = ":db",
    package = "db",
)

go_test(
    name = "db_test",
    srcs = [
        "db_test.go",
        "mock_db_test.go",
    ],
    embed = [":db"],
    deps = [
        "@com_github_golang_mock//gomock",
        "@com_github_google_go_cmp//cmp:go_default_library",
        "@com_github_stargate_stargate_grpc_go_client//stargate/pkg/proto",
        "@org_golang_google_protobuf//testing/protocmp:go_default_library",
    ],
)

What I'd like to do is depend on :mock_db in this and other build files. I would want it to look something like:

backend/common/db/BUILD.bazel:

# Contains StargateQueryExecutor interface
go_library(
    name = "db",
    srcs = ["interfaces.go"],
    importpath = "backend/common/db",
    visibility = ["//visibility:public"],
    deps = [
        "@com_github_stargate_stargate_grpc_go_client//stargate/pkg/proto",
    ],
)
gomock(
    name = "mock_db",
    out = "mock_db_test.go",
    interfaces = ["StargateQueryExecutor"],
    library = ":db",
    package = "db",
)

backend/service/db/BUILD.bazel:

go_library(
    name = "db",
    srcs = ["db.go"],
    importpath = "backend/service/db",
    visibility = ["//visibility:public"],
    deps = [
        "//backend/common/db",
        "@com_github_huandu_go_sqlbuilder//:go-sqlbuilder",
        "@com_github_stargate_stargate_grpc_go_client//stargate/pkg/proto",
    ],
)
go_test(
    name = "db_test",
    srcs = [
        "db_test.go",
        "mock_db_test.go",
    ],
    embed = [":db"],
    deps = [
        "//backend/common/db:mock_db", # <--- THIS
        "@com_github_golang_mock//gomock",
        "@com_github_google_go_cmp//cmp:go_default_library",
        "@com_github_stargate_stargate_grpc_go_client//stargate/pkg/proto",
        "@org_golang_google_protobuf//testing/protocmp:go_default_library",
    ],
)

When I try this, it can't find the mock_db_test.go source file.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文