常见的 Bazel gomock 规则
有没有一种方法可以在一个库中声明 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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论