Ich verwende das Netconf-Paket von Juniper („github.com/juniper/go-netconf/netconf“), um eine Netconf-Sitzung in meinem Code einzurichten.
Ich möchte wissen, wie man eine Netconf-Sitzung in einem Unit-Test simuliert.
Meine Methode ist:
func testmyfunction(t *testing.t) { getsshconnection = mockgetsshconnection got := myfunction() want := 123 if !reflect.deepequal(got, want) { t.errorf("error expectation not met, want %v, got %v", want, got) } }
func mockgetsshconnection() (*netconf.session, error) { var sess netconf.session sess.sessionid = 123 return &sess, nil }
Das Problem tritt auf, wenn myfunction() eine Zeile enthält, die sess.close() verzögert und aufgrund der Nullzeiger-Dereferenzierung einen Fehler auslöst
func MyFunction() int { sess, err := getSSHConnection() // returns (*netconf.Session, error) if err == nil && sess != nil { defer sess.Close() -> Problem happens here // Calls RPC here and rest of the code here } return 0 }
Welche Änderungen kann ich also an der Methode „mockgetsshconnection()“ vornehmen, damit sess.close() keinen Fehler auslöst? Simulieren und verwenden Sie es in realen Beispielen von
nil
指针错误源自 close
函数 当底层transport
调用close
时。幸运的是 transport
是一个 interface
类型,您可以轻松地在 netconf.session
. Zum Beispiel so:
type MockTransport struct{} func (t *MockTransport) Send([]byte) error { return nil } func (t *MockTransport) Receive() ([]byte, error) { return []byte{}, nil } func (t *MockTransport) Close() error { return nil } func (t *MockTransport) ReceiveHello() (*netconf.HelloMessage, error) { return &netconf.HelloMessage{SessionID: 123}, nil } func (t *MockTransport) SendHello(*netconf.HelloMessage) error { return nil } func (t *MockTransport) SetVersion(version string) { } func mockGetSSHConnection() (*netconf.Session, error) { t := MockTransport{} sess := netconf.NewSession(&t) return sess, nil }
Bitte beachten Sie, dass die Funktion, die Sie testen möchten, derzeit 0
而不是会话的 sessionid
zurückgibt. Daher sollten Sie das Problem beheben, bevor der Test erfolgreich ist.
Das obige ist der detaillierte Inhalt vonSo verspotten Sie eine Netconf-Sitzung beim Unit-Testen von Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!