对我来说,单元测试有工作量。所以我使用gotests来生成Boilerplate测试代码的情况。如何处理单元测试中的新服务器函数
server.go
func NewServer(cfg *Config, l net.Listener, driver Driver, db store.Store) *Server {
s := &Server{
cfg: cfg,
listener: l,
leader: "",
driver: driver,
db: db,
}
s.server = &http.Server{
Handler: s.createMux(),
}
return s
}
gotests生成server_test.go:
func TestNewServer(t *testing.T) {
fakeCfg := &Config{
Listen: "hello",
LogLevel: "debug",
}
type args struct {
cfg *Config
l net.Listener
leader string
driver Driver
db store.Store
}
tests := []struct {
name string
args args
want *Server
}{
{
name: "test",
args: args{
cfg: fakeCfg,
},
want: &Server{
cfg: fakeCfg,
server: &http.Server{
Handler: nil,
},
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := NewServer(tt.args.cfg, tt.args.l, tt.args.driver, tt.args.db); !reflect.DeepEqual(got, tt.want) {
t.Errorf("NewServer() = %v, want %v", got, tt.want)
}
})
}
}
单元测试结果:
$ go test -v -run TestNewServer
=== RUN TestNewServer
=== RUN TestNewServer/test
--- FAIL: TestNewServer (0.00s)
--- FAIL: TestNewServer/test (0.00s)
server_test.go:47: NewServer() = &{cfg:0xc4201f5580 listener:<nil> leader: server:0xc4201d6840 driver:<nil> db:<nil> Mutex:{state:0 sema:0}}, want &{cfg:0xc4201f5580 listener:<nil> leader: server:0xc4201d6790 driver:<nil> db:<nil> Mutex:{state:0 sema:0}}
FAIL
exit status 1
FAIL github.com/Dataman-Cloud/swan/api 0.017s
因为初始服务器结构是不是一个步骤。我无法在&服务器{}部分更正服务器属性。
任何人都可以帮我一个忙,给我一个提示吗?如何在这种情况下写测试?
你是比较服务器的指针。在您的测试用例中,您正在创建一个指针,并在您的NewServer()内部创建一个指针。这是两个不同的指针。所以你的测试失败了。 – apxp