Saya menggunakan pakej netconf juniper ("github.com/juniper/go-netconf/netconf") untuk mewujudkan sesi netconf dalam kod saya.
Saya ingin tahu cara mensimulasikan sesi netconf dalam ujian unit.
Kaedah saya ialah:
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 }
Masalah timbul apabila myfunction() mempunyai garisan yang melambatkan sess.close() dan melemparkan ralat akibat penyahrujukan penunjuk nil
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 }
Jadi, apakah perubahan yang boleh saya lakukan pada kaedah mockgetsshconnection() supaya sess.close() tidak menimbulkan ralat? Simulasikan dan gunakannya dalam contoh sebenar
nil
指针错误源自 close
函数 当底层transport
调用close
时。幸运的是 transport
是一个 interface
类型,您可以轻松地在 netconf.session
. Contohnya seperti ini:
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 }
Sila ambil perhatian bahawa fungsi yang anda ingin uji kini kembali 0
而不是会话的 sessionid
. Oleh itu, anda harus membetulkan isu tersebut sebelum ujian berjaya.
Atas ialah kandungan terperinci Bagaimana untuk mengejek sesi netconf dalam ujian unit Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!