cloudwego / cloudwego/hertz

自定义模板中使用 update_behavior: type: "skip" 不生效

Open
#1,428 8 comments 0 reactions 1 assignee Claimed by @HeyJavaBean View on GitHub
tool
Dominant language
Go
Stars
7.4k
Forks
643
Avg merge
14h 5m
Merged PRs (30d)
2

Description

**Describe the Question**

我的目标是为每个 `handler.go` 添加一个单测文件,但是当使用 `hz update` 更新时,我希望忽略单测文件,以便于保存我对测试函数的修改
按用户文档描述,我在自定义模板 `package.yaml` 生成单测文件的部分添加 `update_behavior: type: "skip"` 来达到这个目的。
但是结果依然覆盖了单测文件。

**Reproducible Code**

问题复现如下:
首先我的目录如下所示
```text
├── Makefile
├── api
│   └── hello.proto
├── app
├── template
│   └── package.yaml
└── third_party
└── api.proto // hz 提供的注解文件
```
`package.yaml`如下
```yaml
layouts:
- path: "{{.HandlerDir}}/{{.GenPackage}}/{{ToSnakeCase .ServiceName}}_test.go"
loop_service: true
update_behavior:
type: "skip" # 用于在 hz update 时跳过
body: |-
package {{.FilePackage}}
import (
"bytes"
"testing"

"github.com/cloudwego/hertz/pkg/app/server"
"github.com/cloudwego/hertz/pkg/common/test/assert"
"github.com/cloudwego/hertz/pkg/common/ut"
)
{{range $_, $MethodInfo := $.Methods}}
func Test{{$MethodInfo.Name}}(t *testing.T) {
h := server.Default()
h.{{$MethodInfo.HTTPMethod}}("{{$MethodInfo.Path}}", {{$MethodInfo.Name}})
w := ut.PerformRequest(h.Engine, "{{$MethodInfo.HTTPMethod}}", "{{$MethodInfo.Path}}", &ut.Body{Body: bytes.NewBufferString(""), Len: 1},
ut.Header{})
resp := w.Result()
assert.DeepEqual(t, 201, resp.StatusCode())
assert.DeepEqual(t, "", string(resp.Body()))
// todo edit your unit test.
}
{{end}}
```

`hello.proto`如下
```proto
syntax = "proto3";

package hello;

import "api.proto";
service hello {
rpc echo(Req) returns (Resp) { option (api.get) = "/echo"; };
}

message Req {}

message Resp {}
```
`Makefile` 如下
```makefile
new:
hz new --idl api/hello.proto --mod issue -I "third_party;." --out_dir app/hello \
--customize_package=template/package.yaml --force
.PHONY: new

update:
hz update --idl api/hello.proto --mod issue -I "third_party;." --out_dir app/hello \
--customize_package=template/package.yaml
.PHONY: update

```
此时在根目录执行
```shell
make new
```
得到`app/hello/biz/handler/hello/hello_test.go`
```go
//hello_test.go
package hello

import (
"bytes"
"testing"

"github.com/cloudwego/hertz/pkg/app/server"
"github.com/cloudwego/hertz/pkg/common/test/assert"
"github.com/cloudwego/hertz/pkg/common/ut"
)

func TestEcho(t *testing.T) {
h := server.Default()
h.GET("/echo", Echo)
w := ut.PerformRequest(h.Engine, "GET", "/echo", &ut.Body{Body: bytes.NewBufferString(""), Len: 1},
ut.Header{})
resp := w.Result()
assert.DeepEqual(t, 201, resp.StatusCode())
assert.DeepEqual(t, "", string(resp.Body()))
// todo edit your unit test.
}

```
将其略作修改如下
```go
// hello_test.go
package hello

import (
"testing"
)

func TestEcho(t *testing.T) {
// todo edit your unit test.
}

```
执行
```shell
make update
```
`hello_test.go` 的修改被覆盖了,没有达到预期

**Hertz version:**
```text
# hz -v
hz version v0.9.7

github.com/cloudwego/hertz v0.10.2
```

**Environment:**

The output of `go env`.
```text
set AR=ar
set CC=gcc
set CGO_CFLAGS=-O2 -g
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-O2 -g
set CGO_ENABLED=1
set CGO_FFLAGS=-O2 -g
set CGO_LDFLAGS=-O2 -g
set CXX=g++
set GCCGO=gccgo
set GO111MODULE=on
set GOAMD64=v1
set GOARCH=amd64
set GOAUTH=netrc
set GOBIN=
set GOCACHE=C:\Users\xxx\AppData\Local\go-build
set GOCACHEPROG=
set GODEBUG=
set GOENV=C:\Users\xxx\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFIPS140=off
set GOFLAGS=
set GOGCCFLAGS=-m64 -mthreads -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=C:\Users\xxx\AppData\Local\Temp\go-build1522494292=/tmp/go-build -gno-record-gcc-switches
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMOD=NUL
set GOMODCACHE=C:\Users\xxx\go\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=C:\Users\xxx\go
set GOPRIVATE=
set GOPROXY=https://goproxy.cn,direct
set GOROOT=C:/Users/xxx/scoop/apps/go/current
set GOSUMDB=sum.golang.org
set GOTELEMETRY=on
set GOTELEMETRYDIR=C:\Users\xxx\AppData\Roaming\go\telemetry
set GOTMPDIR=
set GOTOOLCHAIN=auto
set GOTOOLDIR=C:\Users\xxx\scoop\apps\go\current\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.25.0
set GOWORK=
set PKG_CONFIG=pkg-config
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.