2017-08-03 49 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

最後我做特技測試,我手動組成所述對象的每個元素。它的作用就像一種魅力。

相關問題