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

Gomock n'a pas renvoyé la valeur attendue

PHPz
PHPzavant
2024-02-05 22:15:041084parcourir

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")
}

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.

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer