Gomock hat nicht den erwarteten Wert zurückgegeben

PHPz
Freigeben: 2024-02-05 22:15:04
nach vorne
1058 Leute haben es durchsucht

Gomock 未返回预期值

Frageninhalt

Ich bin ein erfahrener Programmierer, aber noch Neuling. Ich schreibe einige Protokollierungstests und habe für diese Zwecke logsink 类的模拟(使用 mockgen generiert. Da dieser Teil vollständig automatisch generiert wird, können wir davon ausgehen, dass es dort keine Probleme gibt.

Das ist mein Testcode:

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")
}
Nach dem Login kopieren

Aber dieser Test schlägt fehl, weil das „foo“-Protokoll nie aufgerufen wird. Ich bin den Code durchgegangen und habe mein expect().do() 代码按预期被调用,并返回 true,但在模拟代码中,它将 logger.sink.enabled() 的结果视为 false gefunden!

Was habe ich falsch gemacht? Vermisse ich einen geheimen Schalter?


Richtige Antwort


Nun, es stellt sich heraus, dass .do() absichtlich den Rückgabewert ignoriert. Hier ist die Dokumentation im 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.
Nach dem Login kopieren

Abwärtskompatibilität. richtig. Eine verdammte Grube der Public Domain, wenn Sie mich fragen...

Das obige ist der detaillierte Inhalt vonGomock hat nicht den erwarteten Wert zurückgegeben. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage