jeudi 3 août 2017

howto handle NewServer func in unit testing

for me , unit testing has workload. so i use gotests to generate Boilerplate testing code case.

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 generate 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)
            }
        })
    }
}

unit test result:

$ 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    http://ift.tt/2uZ5JNk       0.017s

because the initial server struct is not one step. i can't correct get server attribute in &Server{} section.

anyone can do me a favor, give me a hint?howto write test on this situation?

Aucun commentaire:

Enregistrer un commentaire