2017-08-03 65 views
0

对我来说,单元测试有工作量。所以我使用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 

因为初始服务器结构是不是一个步骤。我无法在&服务器{}部分更正服务器属性。

任何人都可以帮我一个忙,给我一个提示吗?如何在这种情况下写测试?

+0

你是比较服务器的指针。在您的测试用例中,您正在创建一个指针,并在您的NewServer()内部创建一个指针。这是两个不同的指针。所以你的测试失败了。 – apxp

回答

2

您正在比较指针而不是数值。

您应该将测试更改为:

!reflect.DeepEqual(*got, *tt.want) 

这样,你就比较结构的内容。

+0

我知道,当我构建服务器结构实例:愿意,我发现NEWSERVER func被绑定ATTR服务器到另一个服务器结构的方法。我无法找到一种方法来删除服务器依赖。 – xds2000

0

最后我做特技测试,我手动组成所述对象的每个元素。它的作用就像一种魅力。

相关问题