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?
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!