Maison > développement back-end > Golang > Gomock n'a pas renvoyé la valeur attendue

Gomock n'a pas renvoyé la valeur attendue

PHPz
Libérer: 2024-02-05 22:15:04
avant
1096 Les gens l'ont consulté

Gomock 未返回预期值

Contenu de la question

Je suis un programmeur expérimenté mais encore nouveau. J'écris quelques tests de journalisation et à ces fins j'ai généré logsink 类的模拟(使用 mockgen). Étant donné que toute cette partie est générée automatiquement, je pense que nous pouvons supposer qu’il n’y a aucun problème.

Voici mon code de test :

func TestLogging(t *testing.T) {
    ls := mock.NewMockLogSink(gomock.NewController(t))
    ls.EXPECT().Init(gomock.Any())
    const logLevel = 1
    ls.EXPECT().Enabled(gomock.Any()).AnyTimes().Do(func(level int) bool {
        return level <= logLevel
    })
    log.Set(logr.New(ls))
    ls.EXPECT().Info(gomock.Any(), "Foo").Times(1)
    log.Info("Foo")
    ls.EXPECT().Info(gomock.Any(), "Bar").Times(0)
    log.V(2).Info("Bar")
}
Copier après la connexion

Mais ce test échoue car le journal "foo" n'est jamais appelé. J'ai parcouru le code et trouvé mon expect().do() 代码按预期被调用,并返回 true,但在模拟代码中,它将 logger.sink.enabled() 的结果视为 false !

Qu'est-ce que j'ai fait de mal ? Est-ce qu'il me manque un interrupteur secret ?


Bonne réponse


Eh bien, il s'avère que .do() intentionnellement ignore la valeur de retour. Voici la documentation dans le code :

// Do declares the action to run when the call is matched. The function's
// return values are ignored to retain backward compatibility. To use the
// return values call DoAndReturn.
Copier après la connexion

Compatibilité ascendante. correct. Un foutu gouffre du domaine public, si vous me demandez...

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