Heim >Backend-Entwicklung >Golang >Gomock hat nicht den erwarteten Wert zurückgegeben

Gomock hat nicht den erwarteten Wert zurückgegeben

PHPz
PHPznach vorne
2024-02-05 22:15:041102Durchsuche

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

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.

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen