Maison > développement back-end > Golang > le corps du texte

Comment se moquer d'une session netconf lors des tests unitaires Golang

WBOY
Libérer: 2024-02-12 15:42:16
avant
858 Les gens l'ont consulté

如何在单元测试 Golang 中模拟 netconf 会话

Contenu de la question

J'utilise le package netconf de Juniper ("github.com/juniper/go-netconf/netconf") pour établir une session netconf dans mon code.

Je veux savoir comment simuler une session netconf dans un test unitaire.

Ma méthode est la suivante :

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)
    }
}
Copier après la connexion
func mockgetsshconnection() (*netconf.session, error) {
    var sess netconf.session
    sess.sessionid = 123
    return &sess, nil
}
Copier après la connexion

Le problème survient lorsque myfunction() a une ligne qui retarde sess.close() et renvoie une erreur en raison du déréférencement nul du pointeur

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
}
Copier après la connexion

Alors, quelles modifications puis-je apporter à la méthode mockgetsshconnection() pour que sess.close() ne génère pas d'erreur ? Simulez-le et utilisez-le dans des exemples réels de

Solution

nil 指针错误源自 close 函数 当底层transport调用close时。幸运的是 transport 是一个 interface 类型,您可以轻松地在 netconf.session. Par exemple comme ceci :

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
}
Copier après la connexion

Veuillez noter que la fonction que vous souhaitez tester revient actuellement 0 而不是会话的 sessionid . Par conséquent, vous devez résoudre le problème avant la réussite du test.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal